verror-0
Version:
VError without dependencies on top of nodejs standart library
49 lines (48 loc) • 1.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.cause = void 0;
exports.findCause = findCause;
exports.hasCause = hasCause;
const is_error_js_1 = require("./is-error.js");
const cause = (err) => {
if (!(0, is_error_js_1.isError)(err)) {
throw new Error('err must be an Error');
}
if ('jse_cause' in err) {
return (0, is_error_js_1.isError)(err.jse_cause) ? err.jse_cause : null;
}
return (0, is_error_js_1.isError)(err.cause) ? err.cause : null;
};
exports.cause = cause;
function findCause(err, name) {
if (!(0, is_error_js_1.isError)(err)) {
throw new Error('err must be an Error');
}
if ((typeof name === 'string' && name.length === 0) ||
(Array.isArray(name) && name.length === 0) ||
(name instanceof Set && name.size === 0)) {
throw new Error('name cannot be empty');
}
const nameSet = typeof name === 'string' ? new Set([name]) : Array.isArray(name) ? new Set(name) : name;
for (let c = err; c !== null; c = (0, exports.cause)(c)) {
if (nameSet.has(c.name))
return c;
}
return null;
}
function hasCause(err, name) {
const result = typeof name === 'string'
? findCause(err, name)
: Array.isArray(name)
? findCause(err, name)
: name instanceof Set
? findCause(err, name)
: null;
if (result === null) {
if (typeof name === 'string' || Array.isArray(name) || name instanceof Set) {
return false;
}
throw new Error('Invalid type for name');
}
return true;
}