(tasks, callback)
| 104 | * }); |
| 105 | */ |
| 106 | export default function autoInject(tasks, callback) { |
| 107 | var newTasks = {}; |
| 108 | |
| 109 | forOwn(tasks, function (taskFn, key) { |
| 110 | var params; |
| 111 | var fnIsAsync = isAsync(taskFn); |
| 112 | var hasNoDeps = |
| 113 | (!fnIsAsync && taskFn.length === 1) || |
| 114 | (fnIsAsync && taskFn.length === 0); |
| 115 | |
| 116 | if (isArray(taskFn)) { |
| 117 | params = taskFn.slice(0, -1); |
| 118 | taskFn = taskFn[taskFn.length - 1]; |
| 119 | |
| 120 | newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn); |
| 121 | } else if (hasNoDeps) { |
| 122 | // no dependencies, use the function as-is |
| 123 | newTasks[key] = taskFn; |
| 124 | } else { |
| 125 | params = parseParams(taskFn); |
| 126 | if (taskFn.length === 0 && !fnIsAsync && params.length === 0) { |
| 127 | throw new Error("autoInject task functions require explicit parameters."); |
| 128 | } |
| 129 | |
| 130 | // remove callback param |
| 131 | if (!fnIsAsync) params.pop(); |
| 132 | |
| 133 | newTasks[key] = params.concat(newTask); |
| 134 | } |
| 135 | |
| 136 | function newTask(results, taskCb) { |
| 137 | var newArgs = arrayMap(params, function (name) { |
| 138 | return results[name]; |
| 139 | }); |
| 140 | newArgs.push(taskCb); |
| 141 | wrapAsync(taskFn).apply(null, newArgs); |
| 142 | } |
| 143 | }); |
| 144 | |
| 145 | auto(newTasks, callback); |
| 146 | } |
nothing calls this directly
no test coverage detected
searching dependent graphs…