atsid/ultra-throttle

View on GitHub
gulp.tasks.js

Summary

Maintainability
A
0 mins
Test Coverage
const gulp = require('gulp');
const mocha = require('gulp-mocha');
const babel = require('gulp-babel');
const changed = require('gulp-changed');
const runSequence = require('run-sequence');
const istanbul = require('gulp-istanbul');
const eslint = require('gulp-eslint');
const plumber = require('gulp-plumber');
const gutil = require('gulp-util');
const isparta = require('isparta');
const del = require('del');
require('gulp-semver-tasks')(gulp);

let MOCHA_REPORTER = 'nyan';
const paths = {
    source: ['src/**/*.js', '!src/**/*.test.js'],
    staticAssets: ['package.json', 'LICENSE', 'README.md', '.npmignore'],
    dest: './dist',
    main: 'src/index.js',
    test: 'src/**/*.test.js',
    testhelpers: 'test/**/*.js',
    build: {
        main: 'Gulpfile.js',
        tasks: 'gulp.tasks.js',
    },
};
const SRC_STATIC_CHECK_GLOB = paths.source.concat([
        paths.main,
        paths.build.main,
        paths.build.tasks,
    ]);
const TEST_STATIC_CHECK_GLOB = [
        paths.test,
        paths.testhelpers,
    ];
const ESLINT_TEST_CONF = {
    rules: {
        'no-unused-expressions': 0,
    },
    globals: {
        'describe': true,
        'it': true,
        'before': true,
        'beforeEach': true,
        'after': true,
        'afterEach': true,
    },
};
const TDD_CONF = {
    errorHandler: () => gutil.beep(),
};

function doBabel(conf) {
    return gulp.src(paths.source)
        .pipe(plumber(conf))
        .pipe(changed(paths.dest))
        .pipe(babel())
        .pipe(gulp.dest(paths.dest));
}

function doLintSrc(conf) {
    return gulp.src(SRC_STATIC_CHECK_GLOB)
        .pipe(plumber(conf))
        .pipe(eslint())
        .pipe(eslint.format())
        .pipe(eslint.failOnError());
}

function doLintTest(conf) {
    return gulp.src(TEST_STATIC_CHECK_GLOB)
        .pipe(plumber(conf))
        .pipe(eslint(ESLINT_TEST_CONF))
        .pipe(eslint.format())
        .pipe(eslint.failOnError());
}

function doTest(cb, conf) {
    gulp.src(paths.source)
        .pipe(plumber(conf))
        .pipe(istanbul({
            instrumenter: isparta.Instrumenter,
            includeUntested: true,
        }))
        .pipe(istanbul.hookRequire())
        .on('finish', () => {
            gulp.src(paths.test)
                .pipe(plumber(conf))
                .pipe(mocha({reporter: MOCHA_REPORTER}))
                .pipe(istanbul.writeReports({
                    reporters: ['lcov', 'text-summary'],
                }))
                .on('end', () => cb());
        })
        .on('error', (err) => cb(err));
}

gulp.task('babel', () => doBabel());
gulp.task('lint-source', () => doLintSrc());
gulp.task('lint-test', () => doLintTest());
gulp.task('lint-source-tdd', () => doLintSrc(TDD_CONF));
gulp.task('lint-test-tdd', () => doLintTest(TDD_CONF));
gulp.task('lint', ['lint-source', 'lint-test']);
gulp.task('lint-tdd', ['lint-source-tdd', 'lint-test-tdd']);
gulp.task('clean', () => del(paths.dist));
gulp.task('test', (cb) => doTest(cb));
gulp.task('test-tdd', (cb) => doTest(cb, TDD_CONF));


gulp.task('static-assets', () => {
    return gulp.src(paths.staticAssets)
        .pipe(gulp.dest(paths.dest));
});

gulp.task('build', (cb) => {
    runSequence(
        ['lint', 'babel', 'static-assets'],
        'test',
        cb
    );
});

gulp.task('ci-config', () => MOCHA_REPORTER = 'spec');
gulp.task('ci-build', (cb) => {
    runSequence(
        'ci-config',
        'build',
        cb
    );
});

gulp.task('release', (cb) => {
    runSequence(
        'clean',
        'build',
        cb
    );
});

gulp.task('watch', () => gulp.watch(['src/**/*.js'], ['lint-tdd', 'test-tdd']));
gulp.task('default', ['build']);