rodrigogs/punto

View on GitHub
gulpfile.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';

const gulp = require('gulp');
const Server = require('karma').Server;
const pkg = require('./package.json');
const plugins = require('gulp-load-plugins')();
const runSequence = require('run-sequence');
const del = require('del');
const stylish = require('jshint-stylish');

const jsdocConfig = require('./jsdoc-config.json');

const mainFiles = [
  'punto.js'
];

gulp.task('init', () => {
  return plugins.bower();
});

gulp.task('build', done => {
  return runSequence('clean', 'build-raw', 'build-min', done);
});

gulp.task('build-raw', () => {
  return gulp.src(mainFiles)
    .pipe(plugins.concat('punto.js'))
    .pipe(banner())
    .pipe(plugins.stripDebug())
    .pipe(gulp.dest('build'));
});

gulp.task('build-min', () => {
  return gulp.src(mainFiles)
    .pipe(plugins.uglify({
      preserveComments: 'some'
    }))
    .pipe(plugins.concat('punto-min.js'))
    .pipe(plugins.stripDebug())
    .pipe(gulp.dest('build'));
});

gulp.task('clean', done => {
  del(['build']).then(() => {
    done();
  });
});

gulp.task('docs', cb => {
  gulp.src(['README.md', './*.js'], {read: false})
    .pipe(plugins.jsdoc3(jsdocConfig, cb));
});

gulp.task('format', () => {
  return gulp.src(['./*.js'])
    .pipe(plugins.esformatter())
    .pipe(gulp.dest('.'));
});

gulp.task('lint', () => {
  return gulp.src(['./*.js'])
    .pipe(plugins.jshint())
    .pipe(plugins.jshint.reporter(stylish))
    .pipe(plugins.jshint.reporter('fail'));
});

gulp.task('watch', ['build'], () => {
  gulp.watch(['./*.js'], ['build']);
});

gulp.task('test', done => {
  new Server({
    configFile: __dirname + '/karma.conf.js',
    singleRun: true
  }).start(done);
});

gulp.task('test-watch', done => {
  new Server({
    configFile: __dirname + '/karma.conf.js'
  }).start(done);
});

// Private helpers
// ===============

function banner() {
  let stamp = [
    '/**',
    ' * punto.js - <%= pkg.description %>',
    ' * @author <%= pkg.author.name %> <<%= pkg.author.email %>>',
    ' * @version v<%= pkg.version %>',
    ' * @link https://github.com/punto',
    ' * @license BSD-2-Clause',
    ' */',
    ''
  ].join('\n');

  return plugins.header(stamp, {
    pkg: pkg
  });
}