UNPKG

object-shape-tester

Version:
36 lines (35 loc) 1.22 kB
import { check } from '@augment-vir/assert'; import { combineErrorMessages, indent } from '@augment-vir/common'; /** * This error is thrown when a shape assertion fails. * * @category Internal */ export class ShapeMismatchError extends TypeError { errors; failureMessage; name = 'ShapeMismatchError'; constructor(errors, failureMessage) { const errorMessages = errors.map((error) => createErrorMessage(error)).join('\n'); const message = combineErrorMessages(failureMessage, `Shape mismatch:\n${indent(errorMessages, 1)}`); super(message); this.errors = errors; this.failureMessage = failureMessage; } } function getSubErrors(error) { return error.errors.flatMap((nestedErrors) => Array.from(nestedErrors)); } function createErrorMessage(error, indentCount = 0) { const subErrorMessages = getSubErrors(error).map((subError) => createErrorMessage(subError, indentCount + 1)); const currentMessage = [ error.path, error.message, ] .filter(check.isTruthy) .join(': ') + (subErrorMessages.length ? ':' : ''); return [ indent(currentMessage, indentCount), ...subErrorMessages, ].join('\n'); }