Skip to content

Instantly share code, notes, and snippets.

@dustingetz
Last active December 17, 2015 05:59
Show Gist options
  • Save dustingetz/5562409 to your computer and use it in GitHub Desktop.
Save dustingetz/5562409 to your computer and use it in GitHub Desktop.
angularjs's annotate(fn) extracted and ported to underscore
/**
* Parse a constructor's signature to find out the names of his arguments. This
* is central to AngularJS dependency injection mechanism.
*/
function annotate(fn) {
var $inject, fnText, argDecl, last;
if (typeof fn == 'function') {
if (!($inject = fn.$inject)) {
$inject = [];
fnText = fn.toString().replace(STRIP_COMMENTS, '');
argDecl = fnText.match(FN_ARGS);
_.forEach(argDecl[1].split(FN_ARG_SPLIT), function(arg) {
arg.replace(FN_ARG, function(all, underscore, name) {
$inject.push(name);
});
});
fn.$inject = $inject;
}
} else if (_.isArray(fn)) {
last = fn.length - 1;
//assertArgFn(fn[last], 'fn')
$inject = fn.slice(0, last);
} else {
//assertArgFn(fn, 'fn', true);
}
return $inject;
}
@dustingetz
Copy link
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment