docs: function getParameterNames(fn){
    const COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
    const code = fn.toString().replace(COMMENTS, '');
    const arrowIndex = code.indexOf('=>');
    const parenLeftIndex = code.indexOf('(');
    const parenRightIndex = code.indexOf(')');
    const parenLess = (!fn.prototype && ~arrowIndex && (
      parenLeftIndex === -1 || // a => a
      parenLeftIndex > arrowIndex // a => (1+2)
    ));
    var parameter = parenLess ?
      code.slice(0, arrowIndex) : // single parameter
      code.slice(parenLeftIndex+1, parenRightIndex);
    if(parenLess && ~parameter.trim().indexOf(' ')) 
      parameter = parameter.split(' ')[1]; // async a
    return parameter.match(/([^\s,]+)/g) || [];
  }