forked from ssbc/patchbay
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathplugs.js
More file actions
40 lines (37 loc) · 939 Bytes
/
plugs.js
File metadata and controls
40 lines (37 loc) · 939 Bytes
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
exports.first = function first(plug) {
return function () {
var args = [].slice.call(arguments)
for(var i = 0; i < plug.length; i++) {
var val = plug[i].apply(null, args)
if(val) return val
}
}
}
exports.map = function (plug) {
return function () {
var args = [].slice.call(arguments)
return plug.map(function (fn) {
if(fn) return fn.apply(null, args)
}).filter(Boolean)
}
}
exports.asyncConcat = function (plug) {
return function () {
var args = [].slice.call(arguments)
var cb = args.pop()
var allResults = []
var waiting = plug.length
plug.forEach(function (fn) {
if (!fn) return next()
fn.apply(null, args.concat(next))
})
function next(err, results) {
if (err) {
waiting = 0
return cb(err)
}
if (results) allResults = allResults.concat(results)
if (--waiting === 0) cb(null, allResults)
}
}
}