blob: 1b6fea43acdb6643a9ff0ad308b79ce6d0cfc374 (
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
|
import auto from './auto';
import forOwn from 'lodash/forOwn';
import arrayMap from 'lodash/_arrayMap';
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 = [...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
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];
});
taskFn(...newArgs.concat(taskCb));
}
});
auto(newTasks, callback);
}
|