UNPKG

5.05 kBJavaScriptView Raw
1/*
2* Gulp task builder version 0.0.3
3*/
4var gulp = require('gulp'),
5 async = require('async'),
6 plugins = require("gulp-load-plugins")({
7 pattern: ['gulp-*', 'gulp.*', 'main-bower-files', 'run-sequence'],
8 replaceString: /\bgulp[\-.]/
9});
10
11
12
13
14var builder = function(){
15 this.activeTasksList = [];
16};
17
18/* Utils Start */
19builder.prototype.getTasks = function(){ return this.activeTasksList; };
20builder.prototype.runTask = function(tasks, callback){
21 callback = callback || function(){};
22 plugins.runSequence(tasks, callback);
23};
24
25builder.prototype.runTasks = function(arr){
26 var _self = this;
27 var tasks = (arr && _self.isArray(arr)) ? arr : _self.activeTasksList;
28 for(var i in tasks) _self.runTask(tasks[i]);
29};
30
31builder.prototype._isObject = function(obj){ return (typeof obj === 'object' && obj !== null );};
32builder.prototype.isArray = Array.isArray || function(arr){ return (arr instanceof Array && arr.constructor.toString().indexOf("Array") > -1); };
33/* Utils End */
34
35builder.prototype.initTask = function(name, taskObj){
36 var _self = this;
37 /* Validate and sone other options like taskObj.preRun */
38 taskObj.name = taskObj.name || name;
39 if(taskObj.preRun){
40 taskObj.preRun = _self.isArray(taskObj.preRun) ? taskObj.preRun : [taskObj.preRun];
41 _self.runTask(taskObj.preRun, function(){
42 // gulp.task(name,taskObj.preRun, _self.buildTask(taskObj));
43 gulp.task(name, _self.buildTask(taskObj));
44 });
45 }
46 else gulp.task(name, _self.buildTask(taskObj));
47 _self.activeTasksList.push(name);
48 if(taskObj.watch) gulp.watch(taskObj.src, [name]);
49
50};
51
52builder.prototype.buildTasks = function(tasks){
53 var _self = this;
54 if(!_self.isArray(tasks) && !_self._isObject(tasks)){ console.log('Invalid tasks list...!'); return; }
55 for(var i in tasks) _self.initTask(tasks[i].name || i, tasks[i]);
56};
57
58builder.prototype.buildTask = function(task){
59 var _self = this;
60 return function(){
61 var gulpTask = gulp.src(task.src).on('error', console.log);
62 if(task.filter) gulpTask = gulpTask.pipe(plugins.filter(task.filter))
63 if(task.preLog) gulpTask = log(gulpTask, task.preLog)
64 if(task.debug){
65 switch(task.ext){
66 case '.js': gulpTask = gulpTask.pipe(plugins.plumber())/*.pipe(plugins.plumber().stop())*/; break;
67 }
68 }
69 if(task.concat){
70 var fileName;
71 if(_self._isObject(task.concat)){
72 fileName = task.concat.name || '';
73 if(task.concat.ext) fileName += (task.concat.ext.indexOf('.') != -1) ? task.concat.ext : ('.'+task.concat.ext);
74 if(! ~fileName.indexOf('.') && task.ext) fileName+= task.ext;
75 }else if( typeof task.concat === 'string'){
76 fileName = task.concat;
77 if(fileName.indexOf('.') == -1 && task.ext) fileName += task.ext;
78 }
79 gulpTask = gulpTask.pipe(plugins.concat(fileName));
80 }
81 if(task.compress && !_self._isObject(task.compress) ) gulpTask = compress(gulpTask, task.ext);
82 if(task.replace){
83 if(_self.isArray(task.replace)){
84 for(var i in task.replace){
85 var repCrit = task.replace[i];
86 if(repCrit.target && repCrit.src ) gulpTask = gulpTask.pipe(plugins.replace(repCrit.target, repCrit.src));
87 if(repCrit.options && _self._isObject(repCrit.options) && task.ext =='.html') gulpTask = gulpTask.pipe(plugins.htmlReplace(repCrit.options));
88 }
89 }else if(_self._isObject(task.replace)){
90 if(task.replace.target && task.replace.src ) gulpTask = gulpTask.pipe(plugins.replace(task.replace.target, task.replace.src));
91 if(task.replace.options && _self._isObject(task.replace.options) && task.ext =='.html') gulpTask = gulpTask.pipe(plugins.htmlReplace(task.replace.options));
92 }else console.log('replace skip of task'+name);
93 }
94 if(task.rename){
95 if(_self._isObject(task.rename) || typeof(task.rename) === 'function') gulpTask = gulpTask.pipe(plugins.rename(task.rename));
96 else console.log('rename skip of task '+name);
97 }
98
99 if(task.wrapper && _self._isObject(task.wrapper) ){
100 var obj = {};
101 if(task.wrapper.header) obj.header = task.wrapper.header
102 if(task.wrapper.footer) obj.footer = task.wrapper.footer
103 gulpTask = gulpTask.pipe( plugins.wrapper(obj) );
104 }
105
106 if(task.compress && _self._isObject(task.compress) && task.compress.post) gulpTask = compress(gulpTask, task.ext);
107
108 if(task.postLog) gulpTask = log(gulpTask, task.preLog)
109 if(task.save) gulpTask = gulpTask.pipe( gulp.dest(task.dest) );
110 console.log(task.name, ' job done');
111 }
112};
113
114function log(stream, opt) {
115 return stream.pipe(plugins.intercept(function(file){
116 opt = (typeof opt === 'string' && file[opt] ) ? opt : "contents";
117 console.log(file[opt].toString()); return file;
118 }));
119}
120
121function compress(stream, ext) {
122 switch(ext){
123 case '.js': return stream.pipe(plugins.uglify())/*.pipe(plugins.plumber().stop())*/;
124 case '.html': return stream.pipe(plugins.htmlmin({collapseWhitespace: true})/*minifyHtml({conditionals: true,spare:true})*/);
125 case '.css': return stream.pipe(plugins.cleanCss({compatibility: 'ie8'}));
126 }
127}
128
129
130module.exports = builder;
\No newline at end of file