/**
* @author Donii Sergii <doniysa@gmail.com>
*/
/**
* @ignore _
* @ignore gulp
* @ignore minify
* @ignore livereload
* @ignore changed
* @ignore plumber
*/
const gulp = require('gulp'),
_ = require('lodash'),
plumber = require('gulp-plumber'),
livereload = require('gulp-livereload'),
changed = require('gulp-changed'),
pathBuild = require("./PathBuild");
/**
* @class Images
* Images build class
*
* @property {String} distDir Default config destination dir
* @property {String} outDir Default config output dir
* @property {Object|Array} paths Paths config
* @property {String} processorName Processor minify name (default is `gulp-imagemin`)
* @property {Function} processor Processor function (get from initialiaze as `require(this.processorName)`
* @property {Object} liveReloadOptions Livereload options plugin
* @property {Object} processorOptions Processor options
* @property {String} distDir Distributive folder from config
* @property {String} outDir Output folder from config
*
* @author Donii Sergii<doniysa@gmail.com>
*/
class Images {
/**
* Images contructor
*
* @param {Object} config Class config
* @param {Object} liveReloadOptions Livereload options
* @param {Object|Array} paths Default config paths
*
* @author Donii Sergii<doniysa@gmail.com>
*/
constructor(config, liveReloadOptions, paths) {
this.distDir = paths.distDir;
this.outDir = paths.outDir;
this.paths = config.paths;
this.processorName = config.processor || 'gulp-imagemin';
this.processor = require(this.processorName);
this.livereloadOptions = liveReloadOptions || {};
this.processorOptions = config.processorOptions || {
interlaced : true,
progressive : true,
optimizationLevel: 5,
svgoPlugins : [{removeViewBox: true}]
};
}
/**
* Run image minify task
*
* @param {{src: {String}, dest: {String}}} path Next path for minify
*
* @author Donii Sergii<doniysa@gmail.com>
*/
runImageMinify(path) {
let task = gulp.src(path.src)
.pipe(plumber())
.pipe(this.processor(this.processorOptions).on('error', console.log))
// .pipe(changed(path.dest))
.pipe(gulp.dest(path.dest))
.pipe(livereload(this.liveReloadOptions));
task.on('error', console.log);
}
/**
* Run minify task
*
* @author Donii Sergii<doniysa@gmail.com>
*/
minify() {
let paths = (new pathBuild(this.paths, this.outDir)).processFullPath(),
_self = this;
if (!_.size(paths)) {
return;
}
_.each(paths, function (path) {
_self.runImageMinify.apply(_self, [path]);
});
}
buildWatch() {
let paths = (new pathBuild(this.paths, this.outDir)).processFullPath();
if (!_.size(paths)) {
return;
}
gulp.watch(pathBuild.buildWatchPaths(paths), ['gulp-imagemin']);
}
}
module.exports = Images;