| | |
| | | var ARROW_FN_ARGS = /^(?:async\s+)?\(?\s*([^)=]+)\s*\)?(?:\s*=>)/; |
| | | var FN_ARG_SPLIT = /,/; |
| | | var FN_ARG = /(=.+)?(\s*)$/; |
| | | var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; |
| | | |
| | | function stripComments(string) { |
| | | let stripped = ''; |
| | | let index = 0; |
| | | let endBlockComment = string.indexOf('*/'); |
| | | while (index < string.length) { |
| | | if (string[index] === '/' && string[index+1] === '/') { |
| | | // inline comment |
| | | let endIndex = string.indexOf('\n', index); |
| | | index = (endIndex === -1) ? string.length : endIndex; |
| | | } else if ((endBlockComment !== -1) && (string[index] === '/') && (string[index+1] === '*')) { |
| | | // block comment |
| | | 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 = func.toString().replace(STRIP_COMMENTS, ''); |
| | | const src = stripComments(func.toString()); |
| | | let match = src.match(FN_ARGS); |
| | | if (!match) { |
| | | match = src.match(ARROW_FN_ARGS); |
| | |
| | | * app.get('/cats', function(request, response) { |
| | | * var User = request.models.User; |
| | | * async.seq( |
| | | * _.bind(User.get, User), // 'User.get' has signature (id, callback(err, data)) |
| | | * User.get.bind(User), // 'User.get' has signature (id, callback(err, data)) |
| | | * function(user, fn) { |
| | | * user.getCats(fn); // 'getCats' has signature (callback(err, data)) |
| | | * } |
| | |
| | | return memoized; |
| | | } |
| | | |
| | | /* istanbul ignore file */ |
| | | |
| | | /** |
| | | * Calls `callback` on a later loop around the event loop. In Node.js this just |
| | | * calls `process.nextTick`. In the browser it will use `setImmediate` if |