dist/redolent.es.js
function functionArguments (fn) {
  if (typeof fn !== 'function') {
    throw new TypeError('function-arguments expect a function')
  }
  if (fn.length === 0) {
    return []
  }

  // from https://github.com/jrburke/requirejs
  var reComments = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg;
  var fnToStr = Function.prototype.toString;
  var fnStr = fnToStr.call(fn);
  fnStr = fnStr.replace(reComments, '') || fnStr;
  fnStr = fnStr.slice(0, fnStr.indexOf('{'));

  var open = fnStr.indexOf('(');
  var close = fnStr.indexOf(')');

  open = open >= 0 ? open + 1 : 0;
  close = close > 0 ? close : fnStr.indexOf('=');

  fnStr = fnStr.slice(open, close);
  fnStr = '(' + fnStr + ')';

  var match = fnStr.match(/\(([\s\S]*)\)/);
  return match ? match[1].split(',').map(function (param) {
    return param.trim()
  }) : []
}
function functionArguments (fn) {
  if (typeof fn !== 'function') {
    throw new TypeError('function-arguments expect a function')
  }
  if (fn.length === 0) {
    return []
  }

  // from https://github.com/jrburke/requirejs
  var reComments = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg;
  var fnToStr = Function.prototype.toString;
  var fnStr = fnToStr.call(fn);
  fnStr = fnStr.replace(reComments, '') || fnStr;
  fnStr = fnStr.slice(0, fnStr.indexOf('{'));

  var open = fnStr.indexOf('(');
  var close = fnStr.indexOf(')');

  open = open >= 0 ? open + 1 : 0;
  close = close > 0 ? close : fnStr.indexOf('=');

  fnStr = fnStr.slice(open, close);
  fnStr = '(' + fnStr + ')';

  var match = fnStr.match(/\(([\s\S]*)\)/);
  return match ? match[1].split(',').map(function (param) {
    return param.trim()
  }) : []
}
/*!
function-arguments <https://github.com/tunnckoCore/function-arguments>

Copyright (c) 2016 Charlike Mike Reagent <@tunnckoCore> (http://www.tunnckocore.tk)
Released under the MIT license.
 
> Get function arguments names.

**Example**

```js
var fnArgs = require('function-arguments')

console.log(fnArgs(function (a, b, c) {})) // => [ 'a', 'b', 'c' ]
console.log(fnArgs(function named (a , b, c) {})) // => [ 'a', 'b', 'c' ]

console.log(fnArgs(a => {})) // => [ 'a' ]
console.log(fnArgs((a, b) => {})) // => [ 'a', 'b' ]

console.log(fnArgs(function * (a ,b, c) {})) // => [ 'a', 'b', 'c' ]
console.log(fnArgs(function * named (a ,b, c) {})) // => [ 'a', 'b', 'c' ]
```

@param  {Function} `fn` Function from which to get arguments names.
@return {Array}
@api public