polyflow
Version:
A flow-based programming framework
28 lines (21 loc) • 684 B
JavaScript
;
var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m;
var FN_ARG_SPLIT = /,/;
var FN_ARG = /^\s*(_?)(.+?)\1\s*$/;
var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
var annotate = function (fn) {
if (fn.$arguments !== undefined) {
return fn.$arguments;
}
var $arguments = [];
var fnText = fn.toString().replace(STRIP_COMMENTS, '');
var argDecl = fnText.match(FN_ARGS);
argDecl[1].split(FN_ARG_SPLIT).forEach(function (arg) {
arg.replace(FN_ARG, function (all, underscore, name) {
$arguments.push(name);
});
});
fn.$arguments = $arguments;
return $arguments;
};
module.exports = annotate;