summaryrefslogtreecommitdiff
path: root/lib/autoInject.js
diff options
context:
space:
mode:
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.");
}