text: // generated on 2017-01-24 using generator-gulp-webapp 1.1.1
  import gulp from 'gulp';
  import gulpLoadPlugins from 'gulp-load-plugins';
  import browserSync from 'browser-sync';
  import del from 'del';
  import {stream as wiredep} from 'wiredep';
  
  const $ = gulpLoadPlugins();
  const reload = browserSync.reload;
  
  gulp.task('styles', () => {
      return gulp.src('app/styles/*.scss')
      .pipe($.plumber())
      .pipe($.sourcemaps.init())
      .pipe($.sass.sync({
          outputStyle: 'expanded',
          precision: 10,
          includePaths: ['.']
      }).on('error', $.sass.logError))
      .pipe($.autoprefixer({browsers: ['> 1%', 'last 2 versions', 'Firefox ESR']}))
      .pipe($.sourcemaps.write())
      .pipe(gulp.dest('.tmp/styles'))
      .pipe(reload({stream: true}));
  });
  
  gulp.task('scripts', () => {
      return gulp.src('app/scripts/**/*.js')
      .pipe($.plumber())
      .pipe($.sourcemaps.init())
      .pipe($.babel())
      .pipe($.sourcemaps.write('.'))
      .pipe(gulp.dest('.tmp/scripts'))
      .pipe(reload({stream: true}));
  });
  
  function lint(files, options) {
      return () => {
          return gulp.src(files)
          .pipe(reload({stream: true, once: true}))
          .pipe($.eslint(options))
          .pipe($.eslint.format())
          .pipe($.if(!browserSync.active, $.eslint.failAfterError()));
      };
  }
  
  const lintOptions = {
      globals: ["$", "_", "Backbone"],
      env: {
          mocha: true
      }
  };
  
  gulp.task('lint', lint('app/scripts/**/*.js', lintOptions));
  gulp.task('lint:test', lint('test/spec/**/*.js', lintOptions));
  
  gulp.task('views', function () {
      var obj = require("./app/data/info.json")
      return gulp.src(['app/views/*.pug', '!app/views/layout*.pug'])
      .pipe($.pug({pretty: true, locals: obj}))
      .pipe(gulp.dest('.tmp'));
  });
  
  gulp.task('html', ['views', 'styles', 'scripts'], () => {
      return gulp.src('.tmp/*.html')
      .pipe($.useref({searchPath: ['.tmp', 'app', '.']}))
      // .pipe($.if('*.js', $.uglify()))
      // .pipe($.if('*.css', $.cssnano()))
      // .pipe($.if('*.html', $.htmlmin({collapseWhitespace: true})))
      .pipe(gulp.dest('dist'));
  });
  
  gulp.task('images', () => {
      return gulp.src('app/images/**/*')
      .pipe($.if($.if.isFile, $.cache($.imagemin({
          progressive: true,
          interlaced: true,
          // don't remove IDs from SVGs, they are often used
          // as hooks for embedding and styling
          svgoPlugins: [{cleanupIDs: false}]
      }))
      .on('error', function (err) {
          console.log(err);
          this.end();
      })))
      .pipe(gulp.dest('dist/images'));
  });
  
  gulp.task('fonts', () => {
      return gulp.src(require('main-bower-files')('**/*.{eot,svg,ttf,woff,woff2}', function (err) {})
      .concat('app/fonts/**/*'))
      .pipe(gulp.dest('.tmp/fonts'))
      .pipe(gulp.dest('dist/fonts'));
  });
  
  gulp.task('data', () => {
      return gulp.src('app/data/**/*')
      // .pipe(gulp.dest('.tmp/data'))
      .pipe(gulp.dest('dist/data'));
  });
  
  gulp.task('extras', () => {
      return gulp.src([
          'app/*.*',
      ], {
          dot: true
      }).pipe(gulp.dest('dist'));
  });
  
  gulp.task('clean', del.bind(null, ['.tmp', 'dist']));
  
  gulp.task('serve', ['styles', 'views', 'scripts', 'fonts', 'data'], () => {
      browserSync({
          notify: false,
          port: 9000,
          server: {
              baseDir: ['.tmp', 'app'],
              routes: {
                  '/bower_components': 'bower_components'
              }
          }
      });
      
      gulp.watch([
          '.tmp/*.html',
          '.tmp/styles/**/*.css',
          '.tmp/scripts/**/*.js',
          'app/images/**/*',
          '.tmp/fonts/**/*',
          'app/data/*.json'
      ]).on('change', reload);
      
      gulp.watch('app/views/**/*', ['views']);
      gulp.watch('app/styles/**/*.scss', ['styles']);
      gulp.watch('app/scripts/**/*.js', ['scripts']);
      gulp.watch('app/images/**/*', ['images']);
      gulp.watch('app/fonts/**/*', ['fonts']);
      gulp.watch('bower.json', ['wiredep', 'fonts']);
  });
  
  gulp.task('serve:dist', () => {
      browserSync({
          notify: false,
          port: 9000,
          server: {
              baseDir: ['dist']
          }
      });
  });
  
  gulp.task('serve:test', ['scripts'], () => {
      browserSync({
          notify: false,
          port: 9000,
          ui: false,
          server: {
              baseDir: 'test',
              routes: {
                  '/scripts': '.tmp/scripts',
                  '/bower_components': 'bower_components'
              }
          }
      });
      
      gulp.watch('app/scripts/**/*.js', ['scripts']);
      gulp.watch('test/spec/**/*.js').on('change', reload);
      gulp.watch('test/spec/**/*.js', ['lint:test']);
  });
  
  // inject bower components
  gulp.task('wiredep', () => {
      gulp.src('app/styles/*.scss')
      .pipe(wiredep({
          ignorePath: /^(\.\.\/)+/
      }))
      .pipe(gulp.dest('app/styles'));
      
      gulp.src('app/views/*.pug')
      .pipe(wiredep({
          exclude: ['bootstrap-sass'],
          ignorePath: /^(\.\.\/)*\.\./
      }))
      .pipe(gulp.dest('app'));
  });
  
  gulp.task('build', ['lint', 'html', 'images', 'fonts', 'extras', 'data'], () => {
      return gulp.src('dist/**/*').pipe($.size({title: 'build', gzip: true}));
  });
  
  gulp.task('deploy', ['build'], function () {
      gulp.src('./dist/**')
      .pipe($.s3(require("./aws.json"), {
          headers: {
              'Cache-Control': 'max-age=315360000, no-transform, public'
          }
      }));
  });
  
  gulp.task('default', ['clean'], () => {
      gulp.start('build');
  });
  