text: // Generated on 2017-05-03 using generator-jhipster 4.0.8
  'use strict';
  
  var gulp = require('gulp'),
      rev = require('gulp-rev'),
      templateCache = require('gulp-angular-templatecache'),
      htmlmin = require('gulp-htmlmin'),
      imagemin = require('gulp-imagemin'),
      ngConstant = require('gulp-ng-constant'),
      rename = require('gulp-rename'),
      eslint = require('gulp-eslint'),
      del = require('del'),
      runSequence = require('run-sequence'),
      browserSync = require('browser-sync'),
      KarmaServer = require('karma').Server,
      plumber = require('gulp-plumber'),
      changed = require('gulp-changed'),
      gulpIf = require('gulp-if');
  
  var handleErrors = require('./gulp/handle-errors'),
      serve = require('./gulp/serve'),
      util = require('./gulp/utils'),
      copy = require('./gulp/copy'),
      inject = require('./gulp/inject'),
      build = require('./gulp/build');
  
  var config = require('./gulp/config');
  
  gulp.task('clean', function () {
      return del([config.dist], { dot: true });
  });
  
  gulp.task('copy', ['copy:fonts', 'copy:common']);
  
  gulp.task('copy:fonts', copy.fonts);
  
  gulp.task('copy:common', copy.common);
  
  gulp.task('copy:swagger', copy.swagger);
  
  gulp.task('copy:images', copy.images);
  
  gulp.task('images', function () {
      return gulp.src(config.app + 'content/images/**')
          .pipe(plumber({errorHandler: handleErrors}))
          .pipe(changed(config.dist + 'content/images'))
          .pipe(imagemin({optimizationLevel: 5, progressive: true, interlaced: true}))
          .pipe(rev())
          .pipe(gulp.dest(config.dist + 'content/images'))
          .pipe(rev.manifest(config.revManifest, {
              base: config.dist,
              merge: true
          }))
          .pipe(gulp.dest(config.dist))
          .pipe(browserSync.reload({stream: true}));
  });
  
  
  gulp.task('styles', [], function () {
      return gulp.src(config.app + 'content/css')
          .pipe(browserSync.reload({stream: true}));
  });
  
  gulp.task('inject', function() {
      runSequence('inject:dep', 'inject:app');
  });
  
  gulp.task('inject:dep', ['inject:test', 'inject:vendor']);
  
  gulp.task('inject:app', inject.app);
  
  gulp.task('inject:vendor', inject.vendor);
  
  gulp.task('inject:test', inject.test);
  
  gulp.task('inject:troubleshoot', inject.troubleshoot);
  
  gulp.task('assets:prod', ['images', 'styles', 'html', 'copy:swagger', 'copy:images'], build);
  
  gulp.task('html', function () {
      return gulp.src(config.app + 'app/**/*.html')
          .pipe(htmlmin({collapseWhitespace: true}))
          .pipe(templateCache({
              module: 'gatewayApp',
              root: 'app/',
              moduleSystem: 'IIFE'
          }))
          .pipe(gulp.dest(config.tmp));
  });
  
  gulp.task('ngconstant:dev', function () {
      return ngConstant({
          name: 'gatewayApp',
          constants: {
              VERSION: util.parseVersion(),
              DEBUG_INFO_ENABLED: true
          },
          template: config.constantTemplate,
          stream: true
      })
      .pipe(rename('app.constants.js'))
      .pipe(gulp.dest(config.app + 'app/'));
  });
  
  gulp.task('ngconstant:prod', function () {
      return ngConstant({
          name: 'gatewayApp',
          constants: {
              VERSION: util.parseVersion(),
              DEBUG_INFO_ENABLED: false
          },
          template: config.constantTemplate,
          stream: true
      })
      .pipe(rename('app.constants.js'))
      .pipe(gulp.dest(config.app + 'app/'));
  });
  
  // check app for eslint errors
  gulp.task('eslint', function () {
      return gulp.src(['gulpfile.js', config.app + 'app/**/*.js'])
          .pipe(plumber({errorHandler: handleErrors}))
          .pipe(eslint())
          .pipe(eslint.format())
          .pipe(eslint.failOnError());
  });
  
  // check app for eslint errors anf fix some of them
  gulp.task('eslint:fix', function () {
      return gulp.src(config.app + 'app/**/*.js')
          .pipe(plumber({errorHandler: handleErrors}))
          .pipe(eslint({
              fix: true
          }))
          .pipe(eslint.format())
          .pipe(gulpIf(util.isLintFixed, gulp.dest(config.app + 'app')));
  });
  
  gulp.task('test', ['inject:test', 'ngconstant:dev'], function (done) {
      new KarmaServer({
          configFile: __dirname + '/' + config.test + 'karma.conf.js',
          singleRun: true
      }, done).start();
  });
  
  
  gulp.task('watch', function () {
      gulp.watch('bower.json', ['install']);
      gulp.watch(['gulpfile.js', 'pom.xml'], ['ngconstant:dev']);
      gulp.watch(config.app + 'content/css/**/*.css', ['styles']);
      gulp.watch(config.app + 'content/images/**', ['images']);
      gulp.watch(config.app + 'app/**/*.js', ['inject:app']);
      gulp.watch([config.app + '*.html', config.app + 'app/**', config.app + 'i18n/**']).on('change', browserSync.reload);
  });
  
  gulp.task('install', function () {
      runSequence(['inject:dep', 'ngconstant:dev'], 'inject:app', 'inject:troubleshoot');
  });
  
  gulp.task('serve', ['install'], serve);
  
  gulp.task('build', ['clean'], function (cb) {
      runSequence(['copy', 'inject:vendor', 'ngconstant:prod'], 'inject:app', 'inject:troubleshoot', 'assets:prod', cb);
  });
  
  gulp.task('default', ['serve']);
  