UNPKG

verror-0

Version:

VError without dependencies on top of nodejs standart library

43 lines (42 loc) 1.38 kB
import { isError } from './is-error.js'; export const cause = (err) => { if (!isError(err)) { throw new Error('err must be an Error'); } if ('jse_cause' in err) { return isError(err.jse_cause) ? err.jse_cause : null; } return isError(err.cause) ? err.cause : null; }; export function findCause(err, name) { if (!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 = cause(c)) { if (nameSet.has(c.name)) return c; } return null; } export 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; }