verror-0
Version:
VError without dependencies on top of nodejs standart library
36 lines (35 loc) • 1.05 kB
JavaScript
import { fromList } from './from-list.js';
/**
* Wraps `unknown` to `Error`. Handles nested errors (`AggregateError` case).
*
* @example
* try {
* // Throws error with message "database connection error"
* await registerTicket(10001000)
* } catch (err) {
* // Result message:
* // "Error register ticket 10001000: database connection error"
* throw new VError(wrap(err), 'Error register ticket %s', 10001000)
* }
*/
export function wrap(err) {
if (typeof err === 'string') {
return new Error(err);
}
if (!err || typeof err !== 'object') {
return new Error('unknown');
}
if (!(err instanceof Error)) {
return new Error('unknown');
}
const hasErrorsProperty = 'errors' in err && Array.isArray(err.errors);
const errorsNotEmpty = hasErrorsProperty && err.errors.length > 0;
if (errorsNotEmpty) {
const multiError = fromList(err.errors);
if (!multiError) {
return new Error('unknown');
}
return multiError;
}
return err;
}