summaryrefslogtreecommitdiff
path: root/lib/autoInject.js
diff options
context:
space:
mode:
authorAlexander Early <alexander.early@gmail.com>2018-07-08 21:24:13 -0700
committerAlexander Early <alexander.early@gmail.com>2018-07-08 21:24:13 -0700
commit17471a579b0650e54b322120b1e6ca85de0846c5 (patch)
treedcec6c2a14d68920b6aa8e4b14b035afd65e36d1 /lib/autoInject.js
parent7e28bed76388312dafd29daa2504de12783eb8b9 (diff)
downloadasync-17471a579b0650e54b322120b1e6ca85de0846c5.tar.gz
fix autoInject tests
Diffstat (limited to 'lib/autoInject.js')
-rw-r--r--lib/autoInject.js23
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/autoInject.js b/lib/autoInject.js
index 935c835..004cfda 100644
--- a/lib/autoInject.js
+++ b/lib/autoInject.js
@@ -2,19 +2,24 @@ import auto from './auto';
import wrapAsync from './internal/wrapAsync';
import { isAsync } from './internal/wrapAsync';
-var FN_ARGS = /^(?:async\s+)?(function)?\s*[^(]*\(\s*([^)]*)\)/m;
+var FN_ARGS = /^(?:async\s+)?(?:function)?\s*[^(]*\(\s*([^)]+)\s*\)(?:\s*{)/m;
+var ARROW_FN_ARGS = /^(?:async\s+)?\(?\s*([^)^=]+)\s*\)?(?:\s*=>)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /(=.+)?(\s*)$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
function parseParams(func) {
- func = func.toString().replace(STRIP_COMMENTS, '');
- func = func.match(FN_ARGS)[2].replace(' ', '');
- func = func ? func.split(FN_ARG_SPLIT) : [];
- func = func.map((arg) => {
- return arg.replace(FN_ARG, '').trim();
- });
- return func;
+ const src = func.toString().replace(STRIP_COMMENTS, '');
+ let match = src.match(FN_ARGS)
+ if (!match) {
+ match = src.match(ARROW_FN_ARGS);
+ }
+ if (!match) throw new Error('could not parse args in autoInject\nSource:\n' + src)
+ let [, args] = match
+ return args
+ .replace(/\s/g, '')
+ .split(FN_ARG_SPLIT)
+ .map((arg) => arg.replace(FN_ARG, '').trim());
}
/**
@@ -120,7 +125,7 @@ export default function autoInject(tasks, callback) {
newTasks[key] = taskFn;
} else {
params = parseParams(taskFn);
- if (taskFn.length === 0 && !fnIsAsync && params.length === 0) {
+ if ((taskFn.length === 0 && !fnIsAsync) && params.length === 0) {
throw new Error("autoInject task functions require explicit parameters.");
}