-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.js
88 lines (78 loc) · 2.26 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
/*!
* base-task-alias <https://github.com/tunnckoCore/base-task-alias>
*
* Copyright (c) 2016 Charlike Mike Reagent <@tunnckoCore> (http://www.tunnckocore.tk)
* Released under the MIT license.
*/
'use strict'
var isValid = require('is-valid-app')
var extend = require('extend-shallow')
function arraify (val) {
if (!val) return []
if (!Array.isArray(val)) return [val]
return val
}
/**
* > Adds `.taskAlias` method that accept
* `name` and `aliases`. It creates task using
* the `.task` method for each item in `aliases`
* array, which task will point to `name` task.
*
* **Example**
*
* ```js
* var tasks = require('base-task')
* var taskAlias = require('base-task-alias')
* var Base = require('base')
* var app = new Base()
*
* app.use(tasks()).use(taskAlias())
* ```
*
* @param {Object} `options` object to merge with `app.options`
* @return {Function} plugin executed by `.use` method
* @api public
*/
module.exports = function baseTaskAlias (options) {
return function plugin (app) {
if (!isValid(app, 'base-task-alias')) return
app.options = extend({}, app.options, options)
app.use(require('base-task')())
/**
* > Creates task for each item in `aliases`
* pointing to `name` as dependency.
*
* **Example**
*
* ```js
* app.use(taskAlias())
*
* app.taskAlias('foo', ['bar', 'qux'])
* app.task('foo', function () {
* console.log('task: foo')
* })
*
* app.build('foo') // => 'task: foo'
* app.build('bar') // => 'task: foo'
* app.build('qux') // => 'task: foo'
* ```
*
* @name .taskAlias
* @param {String} `name` task name to which each alias will point
* @param {Object|Array} `opts` options passed to `.task` or array of `aliases`
* @param {Array|String} `aliases` list of alias task names
* @return {Object} return `this` instance for chaining
* @api public
*/
app.define('taskAlias', function taskAlias (name, opts, aliases) {
var isOk = Array.isArray(opts)
aliases = isOk ? opts : aliases
opts = !isOk && typeof opts === 'object' ? opts : {}
arraify(aliases).forEach(function (alias) {
app.task(alias, opts, [name])
})
return this
})
return plugin
}
}