UNPKG

errobj

Version:

☠️ Serialise errors to literal (JSONable) object

102 lines (97 loc) 2.62 kB
var __defProp = Object.defineProperty; var __getOwnPropSymbols = Object.getOwnPropertySymbols; var __hasOwnProp = Object.prototype.hasOwnProperty; var __propIsEnum = Object.prototype.propertyIsEnumerable; var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; var __spreadValues = (a, b) => { for (var prop in b || (b = {})) if (__hasOwnProp.call(b, prop)) __defNormalProp(a, prop, b[prop]); if (__getOwnPropSymbols) for (var prop of __getOwnPropSymbols(b)) { if (__propIsEnum.call(b, prop)) __defNormalProp(a, prop, b[prop]); } return a; }; // src/lib/props/index.ts var FIELDS = [ "message", "stack", "code", "name", "fileName", "lineNumber", "columnNumber", "address", "dest", "errno", "info", "path", "port", "syscall", "opensslErrorStack", "function", "library", "reason", "details", "description" ]; var props = (error) => Array.from(new Set(Object.getOwnPropertyNames(error).concat(FIELDS))); // src/lib/verify/index.ts function verify(error) { if (!(error instanceof Error)) { throw new RangeError( `Expected an error. Insead got ${typeof error}: ${error}` ); } } // src/lib/parseStack/index.ts import errorStackParser from "error-stack-parser"; function parseStack(error, { offset, parsedStack } = {}) { try { const parsed = errorStackParser.parse(error); if (typeof offset === "number" && offset > 0) { parsed.splice(0, offset); } if (parsedStack) { parsed.length = Math.min(parsed.length, parsedStack); } return parsed; } catch (_) { return [{}]; } } // src/index.ts function errobj(error, enrichment = {}, { offset = 0, parsedStack = 0 } = {}) { verify(error); if (typeof error.toJSON === "function") { error = error.toJSON(); } const parsed = parseStack(error, { offset, parsedStack }); parsedStack && Object.assign(error, { parsedStack: parsed }); const cause = getCause(error); return Object.assign( props(error).reduce( (accumulator, key) => error[key] ? Object.assign(accumulator, { [key]: error[key] }) : accumulator, __spreadValues({}, parsed[0]) ), cause ? { cause } : {}, enrichment ); } function getCause(error) { let { cause } = error; if (cause instanceof Error) { if (cause === error) { cause = "[Circular]"; } else { cause = errobj(cause); } } return typeof cause === "undefined" ? cause : String(cause); } export { errobj }; //# sourceMappingURL=index.mjs.map