Skip to content
Snippets Groups Projects
gulpfile.babel.js 2.25 KiB
Newer Older
const fs = require('fs');

const gulp = require('gulp');
const babel = require('gulp-babel');
const eslint = require('gulp-eslint');

const mocha = require('gulp-mocha');

const nodemon = require('gulp-nodemon');

const Cache = require('gulp-file-cache');

Vytor Calixto's avatar
Vytor Calixto committed
const jsdoc = require('gulp-jsdoc3');

const cache = new Cache();
function createLogDir() {
    const logDirPath = 'build/logs';
    fs.access(logDirPath, fs.F_OK, (err) => {
        if (err) {
            console.info(`Logs directory not found, creating it.`);
            fs.mkdir(logDirPath, 0o700, (dirErr) => {
                console.error(`Failed to create logs directory.\n\tError: ${dirErr}`);
            });
        }
    });
}

* Compile source files
*/
gulp.task('compile', () => {
    createLogDir();
    // run ESLint
    gulp.src('src/**/*.js')
    .pipe(eslint())
    .pipe(eslint.format());

    // compile source to ES5
    gulp.src('src/**/*.js')
    .pipe(cache.filter())       // cache source files
    .pipe(babel())      // compile only modified files
    .pipe(cache.cache())        // cache compiled files
    .pipe(gulp.dest('build'));  // move compiled files to build directory

    // copy configuration file to build directory
    gulp.src('config.json')
    .pipe(gulp.dest('build'));
gulp.task('build', ['compile']);
Vytor Calixto's avatar
Vytor Calixto committed
gulp.task('doc', (cb) => {
    let config = require('./jsdoc.json');
    gulp.src(['README.md', './src/**/*.js'], {read: false})
    .pipe(jsdoc(config, cb));
Vytor Calixto's avatar
Vytor Calixto committed
});

gulp.task('test', () => {
    process.chdir('build');
    gulp.src('test/test.js', {read: false})
    .once('error', () => {
        process.exit(1);
    .once('end', () => {
gulp.task('watch', ['compile'], () => {
    console.log('Watching source directory for changes');
    gulp.watch('src/**/*.js').on('change', () => {
        console.log('Recompiling source');
        gulp.start('compile');
        console.log('Source recompilation done');
gulp.task('run', () => {
    process.chdir('build');
    nodemon({
        script: 'server.js',
        tasks: ['watch'],
        ignore: ["test/test.js", "gulpfile.babel.js"],
        ext: 'js html json',
        env: { 'NODE_ENV': 'development' }
    });
gulp.task('default', ['run']);