UNPKG

verror-0

Version:

VError without dependencies on top of nodejs standart library

49 lines (48 loc) 1.64 kB
"use strict"; 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; }