From 0b361137a27b3e8edaa94e8b8683fbe48393c971 Mon Sep 17 00:00:00 2001 From: Tony Garnock-Jones Date: Thu, 24 Jul 2014 21:07:36 -0700 Subject: [PATCH] Reflect.formalParameters --- src/main.js | 1 + src/reflect.js | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/reflect.js diff --git a/src/main.js b/src/main.js index bfbbad4..de240ad 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,7 @@ module.exports.DOM = require("./dom-driver.js"); module.exports.JQuery = require("./jquery-driver.js"); module.exports.RoutingTableWidget = require("./routing-table-widget.js"); module.exports.WebSocket = require("./websocket-driver.js"); +module.exports.Reflect = require("./reflect.js"); module.exports.Spy = require("./spy.js").Spy; module.exports.WakeDetector = require("./wake-detector.js").WakeDetector; diff --git a/src/reflect.js b/src/reflect.js new file mode 100644 index 0000000..c444d54 --- /dev/null +++ b/src/reflect.js @@ -0,0 +1,25 @@ +// Reflection on function formal parameter lists. +// This module is based on Angular's "injector" code, +// https://github.com/angular/angular.js/blob/master/src/auto/injector.js, +// MIT licensed, and hence: +// Copyright (c) 2010-2014 Google, Inc. http://angularjs.org +// Copyright (c) 2014 Tony Garnock-Jones + +var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m; +var FN_ARG_SPLIT = /,/; +var STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg; + +function formalParameters(fn) { + var result = []; + + var fnText = fn.toString().replace(STRIP_COMMENTS, ''); + var argDecl = fnText.match(FN_ARGS); + var args = argDecl[1].split(FN_ARG_SPLIT); + for (var i = 0; i < args.length; i++) { + result.push(args[i].trim()); + } + + return result; +} + +module.exports.formalParameters = formalParameters;