123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- 'use strict';
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.default = autoInject;
- var _auto = require('./auto.js');
- var _auto2 = _interopRequireDefault(_auto);
- var _wrapAsync = require('./internal/wrapAsync.js');
- var _wrapAsync2 = _interopRequireDefault(_wrapAsync);
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
- var FN_ARGS = /^(?:async\s+)?(?:function)?\s*\w*\s*\(\s*([^)]+)\s*\)(?:\s*{)/;
- var ARROW_FN_ARGS = /^(?:async\s+)?\(?\s*([^)=]+)\s*\)?(?:\s*=>)/;
- var FN_ARG_SPLIT = /,/;
- var FN_ARG = /(=.+)?(\s*)$/;
- function stripComments(string) {
- let stripped = '';
- let index = 0;
- let endBlockComment = string.indexOf('*/');
- while (index < string.length) {
- if (string[index] === '/' && string[index + 1] === '/') {
-
- let endIndex = string.indexOf('\n', index);
- index = endIndex === -1 ? string.length : endIndex;
- } else if (endBlockComment !== -1 && string[index] === '/' && string[index + 1] === '*') {
-
- let endIndex = string.indexOf('*/', index);
- if (endIndex !== -1) {
- index = endIndex + 2;
- endBlockComment = string.indexOf('*/', index);
- } else {
- stripped += string[index];
- index++;
- }
- } else {
- stripped += string[index];
- index++;
- }
- }
- return stripped;
- }
- function parseParams(func) {
- const src = stripComments(func.toString());
- 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());
- }
- function autoInject(tasks, callback) {
- var newTasks = {};
- Object.keys(tasks).forEach(key => {
- var taskFn = tasks[key];
- var params;
- var fnIsAsync = (0, _wrapAsync.isAsync)(taskFn);
- var hasNoDeps = !fnIsAsync && taskFn.length === 1 || fnIsAsync && taskFn.length === 0;
- if (Array.isArray(taskFn)) {
- params = [...taskFn];
- taskFn = params.pop();
- newTasks[key] = params.concat(params.length > 0 ? newTask : taskFn);
- } else if (hasNoDeps) {
-
- newTasks[key] = taskFn;
- } else {
- params = parseParams(taskFn);
- if (taskFn.length === 0 && !fnIsAsync && params.length === 0) {
- throw new Error("autoInject task functions require explicit parameters.");
- }
-
- if (!fnIsAsync) params.pop();
- newTasks[key] = params.concat(newTask);
- }
- function newTask(results, taskCb) {
- var newArgs = params.map(name => results[name]);
- newArgs.push(taskCb);
- (0, _wrapAsync2.default)(taskFn)(...newArgs);
- }
- });
- return (0, _auto2.default)(newTasks, callback);
- }
- module.exports = exports.default;
|