parse-err
Version:
Parse errors in the Browser and Node. Made for Cabin.
50 lines (47 loc) • 2.21 kB
JavaScript
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.parseErr = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
module.exports = isError;
function isError(value) {
switch (Object.prototype.toString.call(value)) {
case '[object Error]':
return true;
case '[object Exception]':
return true;
case '[object DOMException]':
return true;
default:
return value instanceof Error;
}
}
},{}],2:[function(require,module,exports){
const isError = require('iserror');
const parseErr = function (err) {
let fields = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
if (!isError(err)) {
throw new Error('`err` must be an Error');
}
if (!Array.isArray(fields)) {
throw new TypeError('`fields` must be an Array');
}
const keys = {};
const arr = new Set([...Object.getOwnPropertyNames(Object.getPrototypeOf(err)), ...Object.getOwnPropertyNames(err)]);
for (const key of arr) {
if (typeof err[key] !== 'function') {
keys[key] = err[key];
}
}
if (!keys.name && err.constructor.name) {
keys.name = err.constructor.name;
}
if (Array.isArray(err.errors)) {
keys.errors = err.errors.map(e => {
if (isError(e)) {
return parseErr(e, fields);
}
return e;
});
}
return Array.isArray(fields) && fields.length > 0 ? keys.filter(key => fields.includes(key)) : keys;
};
module.exports = parseErr;
},{"iserror":1}]},{},[2])(2)
});