--- /dev/null
+
+/*
+ *
+ * Copyright 2016 RIFT.IO Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+'use strict';
+
+var mountFolder = function (connect, dir) {
+ return connect.static(require('path').resolve(dir));
+};
+
+var webpackDistConfig = require('./webpack.dist.config.js'),
+ webpackDevConfig = require('./webpack.config.js');
+
+module.exports = function (grunt) {
+ // Let *load-grunt-tasks* require everything
+ require('load-grunt-tasks')(grunt);
+
+ // Read configuration from package.json
+ var pkgConfig = grunt.file.readJSON('package.json');
+
+ grunt.initConfig({
+ pkg: pkgConfig,
+
+ version: {
+ project: {
+ src: ['package.json']
+ },
+ src: {
+ options: {
+ prefix: 'semver '
+ },
+ src: ['src/**/*.js']
+ }
+ },
+
+ webpack: {
+ options: webpackDistConfig,
+ dist: {
+ cache: false
+ }
+ },
+
+ 'webpack-dev-server': {
+ options: {
+ hot: true,
+ port: 9000,
+ webpack: webpackDevConfig,
+ publicPath: '/assets/',
+ contentBase: './<%= pkg.src %>/'
+ },
+
+ start: {
+ keepAlive: true
+ }
+ },
+
+ connect: {
+ options: {
+ port: 9000
+ },
+
+ dist: {
+ options: {
+ keepalive: true,
+ middleware: function (connect) {
+ return [
+ mountFolder(connect, pkgConfig.dist)
+ ];
+ }
+ }
+ }
+ },
+
+ open: {
+ options: {
+ delay: 500
+ },
+ dev: {
+ path: 'http://localhost:<%= connect.options.port %>/webpack-dev-server/'
+ },
+ dist: {
+ path: 'http://localhost:<%= connect.options.port %>/'
+ }
+ },
+
+ karma: {
+ unit: {
+ configFile: 'karma.conf.js'
+ }
+ },
+
+ copy: {
+ dist: {
+ files: [
+ // includes files within path
+ {
+ flatten: true,
+ expand: true,
+ src: ['<%= pkg.src %>/*'],
+ dest: '<%= pkg.dist %>/',
+ filter: 'isFile'
+ },
+ {
+ flatten: true,
+ expand: true,
+ src: ['<%= pkg.src %>/images/*'],
+ dest: '<%= pkg.dist %>/images/'
+ },
+ {
+ flatten: true,
+ expand: true,
+ src: ['<%= pkg.src %>/images/logos/*'],
+ dest: '<%= pkg.dist %>/images/logos/'
+ },
+ {
+ flatten: true,
+ expand: true,
+ src: ['<%= pkg.src %>/assets/*'],
+ dest: '<%= pkg.dist %>/assets/'
+ }
+ ]
+ }
+ },
+
+ clean: {
+ dist: {
+ files: [{
+ dot: true,
+ src: [
+ '<%= pkg.dist %>'
+ ]
+ }]
+ }
+ }
+ });
+
+ grunt.registerTask('serve', function (target) {
+ if (target === 'dist') {
+ return grunt.task.run(['build', 'open:dist', 'connect:dist']);
+ }
+
+ grunt.task.run([
+ 'open:dev',
+ 'webpack-dev-server'
+ ]);
+ });
+
+ grunt.registerTask('patch', ['version:project:patch', 'version:src', 'build:dist']);
+
+ grunt.registerTask('test', ['karma']);
+
+ grunt.registerTask('build', ['clean', 'copy', 'webpack']);
+
+ grunt.registerTask('default', []);
+};