-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
117 lines (103 loc) · 2.33 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
'use strict';
var define = require('define-property');
var Target = require('expand-target');
var utils = require('expand-utils');
var use = require('use');
/**
* Create a new Task with the given `options`
*
* ```js
* var task = new Task({cwd: 'src'});
* task.addTargets({
* site: {src: ['*.hbs']},
* blog: {src: ['*.md']}
* });
* ```
* @param {Object} `options`
* @api public
*/
function Task(options) {
if (!(this instanceof Task)) {
return new Task(options);
}
utils.is(this, 'task');
use(this);
this.options = options || {};
if (utils.isTask(options)) {
this.options = {};
this.addTargets(options);
return this;
}
}
/**
* Add targets to the task, while also normalizing src-dest mappings and
* expanding glob patterns in each target.
*
* ```js
* task.addTargets({
* site: {src: '*.hbs', dest: 'templates/'},
* docs: {src: '*.md', dest: 'content/'}
* });
* ```
* @param {Object} `task` Task object where each key is a target or `options`.
* @return {Object}
* @api public
*/
Task.prototype.addTargets = function(task) {
utils.run(this, 'task', task);
for (var key in task) {
if (task.hasOwnProperty(key)) {
var val = task[key];
if (utils.isTarget(val)) {
this.addTarget(key, val);
} else {
this[key] = val;
}
}
}
return this;
};
/**
* Add a single target to the task, while also normalizing src-dest mappings and
* expanding glob patterns in the target.
*
* ```js
* task.addTarget('foo', {
* src: 'templates/*.hbs',
* dest: 'site'
* });
*
* // other configurations are possible
* task.addTarget('foo', {
* options: {cwd: 'templates'}
* files: [
* {src: '*.hbs', dest: 'site'},
* {src: '*.md', dest: 'site'}
* ]
* });
* ```
* @param {String} `name`
* @param {Object} `config`
* @return {Object}
* @api public
*/
Task.prototype.addTarget = function(name, config) {
if (typeof name !== 'string') {
throw new TypeError('expected a string');
}
if (!config || typeof config !== 'object') {
throw new TypeError('expected an object');
}
var target = new Target(this.options);
define(target, '_name', name);
utils.run(this, 'target', target);
target.addFiles(config);
if (!(name in this)) {
this[name] = target;
}
return target;
};
/**
* Expose `Task`
*/
module.exports = Task;