apercova/atom-path-intellisense

View on GitHub
gulpfile.js

Summary

Maintainability
A
0 mins
Test Coverage
'use strict';
/**
 *
 * @description Gulp configuration file.
 * @author
 *  [{@link https://github.com/apercova|github@apercova}],
 *  [{@link https://twitter.com/apercova|twitter@apercova}],
 *  [{@link https://www.npmjs.com/~apercova|npmjs/~apercova}]
 *
 * @since 1.2.0
 */
const del = require('del'),
  gulp = require('gulp'),
  eslint = require('gulp-eslint'),
  gunzip = require('gulp-gunzip'),
  gzip = require('gulp-gzip'),
  jsdoc = require('gulp-jsdoc3'),
  minify = require('gulp-minify'),
  prettierEslint = require('gulp-prettier-eslint'),
  tar = require('gulp-tar'),
  untar = require('gulp-untar');

/**
 * Task for generate docs.
 */
gulp.task('docs', cb => {
  del('docs/**');
  const config = require('./jsdoc.json');
  gulp.src(['README.md', './lib/**/*.js'], { 'read': true }).pipe(jsdoc(config, cb));
});

/**
 * Task for backup source files.
 */
gulp.task('source:backup', () => {
  return gulp
    .src(['**', '!.git/**', '!.docs/**', '!node_modules/**', '!atom-path-intellisense-source.tar.gz'])
    .pipe(tar('atom-path-intellisense-source.tar'))
    .pipe(gzip())
    .pipe(gulp.dest('.'));
});

/**
 * Task for prettify source files.
 */
gulp.task('source:prettify', () => {
  gulp
    .src('lib/**/*.js')
    .pipe(prettierEslint())
    .pipe(gulp.dest('./lib'));
  gulp
    .src('spec/**/*.js')
    .pipe(prettierEslint())
    .pipe(gulp.dest('./spec'));
  return gulp
    .src('gulpfile.js')
    .pipe(prettierEslint())
    .pipe(gulp.dest('.'));
});

/**
 * Task for lint source files with eslint.
 */
gulp.task('source:lint', () => {
  return gulp
    .src(['lib/**/*.js', 'spec/**/*.js', 'gulpfile.js', '.eslintrc.json'])
    .pipe(eslint())
    .pipe(eslint.format())
    .pipe(eslint.failAfterError());
});

/**
 * Task for minify source files.
 */
gulp.task('source:minify', () => {
  gulp
    .src(['spec/**/*.js'], { 'allowEmpty': true })
    .pipe(
      minify({
        'noSource': true,
        'ext': {
          'src': '.js',
          'min': '.js'
        }
      })
    )
    .pipe(gulp.dest('spec/'));
  return gulp
    .src(['lib/**/*.js'], { 'allowEmpty': true })
    .pipe(
      minify({
        'noSource': true,
        'ext': {
          'src': '.js',
          'min': '.js'
        }
      })
    )
    .pipe(gulp.dest('lib/'));
});

/**
 * Task for restore source files from tarball.
 */
gulp.task('source:restore', function() {
  del(['**', '!.git/**', '!.docs/**', '!node_modules/**', '!atom-path-intellisense-source.tar.gz']);
  return gulp
    .src('atom-path-intellisense-source.tar.gz')
    .pipe(gunzip())
    .pipe(untar())
    .pipe(gulp.dest('.'));
});

/**
 * Task for prepare release artifacts.
 */
gulp.task('release:prepare', gulp.series(['source:lint', 'source:prettify', 'docs']));