code: function errorIs(error, criteria) {
  
    /* This function only deals with errors! */
    if (!(error instanceof Error)) {
      return false;
    }
  
    /* Falsy criteria matches everything (catch-all) */
    if (!criteria) {
      return true;
    }
  
    /* If criteria is a constructor... */
    if (typeof criteria === 'function') {
      return error instanceof criteria;
    }
  
    var name = error.name || error.constructor && error.constructor.name || '';
  
    /* If criteria is a string... */
    if (typeof criteria === 'string') {
      return name.toLowerCase() === criteria.toLowerCase();
    }
  
    /* If criteria is a regex... */
    if (criteria instanceof RegExp) {
      return criteria.test(name);
    }
  
    /* Object: do a deep match */
    if (typeof criteria === 'object') {
      return _lodash2['default'].every(Object.keys(criteria), function (key) {
        return _lodash2['default'].matchesProperty(key, criteria[key])(error);
      });
    }
  
    /* Have no idea what the criteria is... */
    throw new Error('Unexpected criteria type: ' + criteria);
  }
docs: errorIs(2)
  
  @description                Checks whether the error is of the specified
  criteria:
  1) falsy: returns true;
  2) function: checks whether error is instance
  of the given constructor;
  3) string: checks if error name is equal the
  string, case insesitive;
  4) regex: checks if error name matches the
  regex;
  5) otherwise: throw.
  @param          {error}     The error instance to check.
  @param          {criteria}  The type to check against, see description.
  @return         {boolean}   True if error matches, false otherwise.