UNPKG

2.8 kBJavaScriptView Raw
1'use strict';
2
3var _ = require('lodash');
4var gulp = require('gulp-help')(require('gulp'));
5var runSequence = require('run-sequence');
6var configurable = require('./configurable.js');
7
8var gulpfy = {
9 _config: [],
10
11 tasks: tasks,
12 create: create
13};
14
15module.exports = gulpfy;
16
17/////////////////////////////
18
19function _add(originalTask) {
20 var task = _.clone(originalTask);
21 var gulpTask = false;
22
23 if (_.isObject(task) && task.name) {
24 gulpTask = {
25 name: task.name,
26 description: task.description || false,
27 dependencies: task.dependencies || [],
28 sequence: task.sequence,
29 callback: task.callback
30 };
31
32 _.forEach(task, function(value, key){
33 var isSubtask = task[key].name;
34 if ((gulpTask[key] !== undefined && value !== undefined) || isSubtask) {
35 delete task[key];
36 }
37 });
38
39 gulpTask.options = task;
40 }
41
42 return gulpTask;
43}
44
45/*-------------------------*/
46
47function tasks() {
48 _.forEach(configurable.settings, function(originalTask){
49 var task = _add(originalTask);
50
51 if (task) {
52 gulpfy._config.push(task);
53
54 _.forEach(originalTask, function(subtask){
55 var subtask = _add(subtask);
56
57 if (subtask) {
58 subtask.options = _.extend(_.clone(task.options), subtask.options);
59 gulpfy._config.push(subtask);
60 }
61 });
62 }
63 });
64}
65
66function create() {
67 var tasks = gulpfy._config.map(function(task){
68 return task.name;
69 });
70
71 gulpfy._config.forEach(function(task){
72 var parentName = task.name.split(':');
73
74 if (parentName.length > 1) {
75 var inParent = configurable.settings[parentName[0]].sequence.indexOf(task.name);
76
77 if (inParent > -1) {
78 task.description = false;
79 }
80 }
81
82 task.sequence = _.intersection(task.sequence || [], tasks);
83 task.dependencies = _.intersection(task.dependencies || [], tasks);
84
85 if (task.sequence.length || task.dependencies.length || task.callback) {
86
87 if (task.sequence.length && !task.callback) {
88 task.callback = function(done) {
89 var sequence = task.sequence;
90
91 sequence.push(done);
92 runSequence.apply({}, sequence);
93 };
94 } else if (task.callback) {
95 var callback = task.callback;
96
97 task.callback = function(done) {
98 return callback(task.options, done);
99 };
100 }
101
102 gulp.task(task.name, task.description, task.dependencies, task.callback);
103 }
104 });
105
106 return gulp;
107}