diff options
Diffstat (limited to 'lib/autoInject.js')
-rw-r--r-- | lib/autoInject.js | 23 |
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."); } |