1 | 'use strict';
|
2 |
|
3 | var _ = require('lodash');
|
4 | var gulp = require('gulp-help')(require('gulp'));
|
5 | var runSequence = require('run-sequence');
|
6 | var configurable = require('./configurable.js');
|
7 |
|
8 | var gulpfy = {
|
9 | _config: [],
|
10 |
|
11 | tasks: tasks,
|
12 | create: create
|
13 | };
|
14 |
|
15 | module.exports = gulpfy;
|
16 |
|
17 |
|
18 |
|
19 | function _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 |
|
47 | function 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 |
|
66 | function 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 | }
|