errobj
Version:
☠️ Serialise errors to literal (JSONable) object
127 lines (121 loc) • 3.78 kB
JavaScript
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __getProtoOf = Object.getPrototypeOf;
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;
};
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/index.ts
var src_exports = {};
__export(src_exports, {
errobj: () => errobj
});
module.exports = __toCommonJS(src_exports);
// 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
var import_error_stack_parser = __toESM(require("error-stack-parser"), 1);
function parseStack(error, { offset, parsedStack } = {}) {
try {
const parsed = import_error_stack_parser.default.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);
}
//# sourceMappingURL=index.js.map