blob: 245db8e81f7a2b52f143e1aa3af0f9874b0425b6 (
plain)
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
|
import auto from './auto';
import forOwn from 'lodash/forOwn';
import arrayMap from 'lodash/_arrayMap';
import clone from 'lodash/_copyArray';
import isArray from 'lodash/isArray';
var argsRegex = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
function parseParams(func) {
return func.toString().match(argsRegex)[1].split(/\s*\,\s*/);
}
export default function autoInject(tasks, callback) {
var newTasks = {};
forOwn(tasks, function (taskFn, key) {
var params;
if (isArray(taskFn)) {
params = clone(taskFn);
taskFn = params.pop();
newTasks[key] = params.concat(newTask);
} else if (taskFn.length === 0) {
throw new Error("autoInject task functions require explicit parameters.");
} else if (taskFn.length === 1) {
// no dependencies, use the function as-is
newTasks[key] = taskFn;
} else {
params = parseParams(taskFn);
params.pop();
newTasks[key] = params.concat(newTask);
}
function newTask(results, taskCb) {
var newArgs = arrayMap(params, function (name) {
return results[name];
});
newArgs.push(taskCb);
taskFn.apply(null, newArgs);
}
});
auto(newTasks, function (err, results) {
var params;
if (isArray(callback)) {
params = clone(callback);
callback = params.pop();
} else {
params = parseParams(callback);
params.shift();
}
params = arrayMap(params, function (name) {
return results[name];
});
params.unshift(err);
callback.apply(null, params);
});
}
|