UNPKG

object-shape-tester

Version:
38 lines (37 loc) 1.27 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 { value; errors; failureMessage; name = 'ShapeMismatchError'; constructor(value, errors, failureMessage) { const errorMessages = errors.map((error) => createErrorMessage(error)).join('\n'); const message = combineErrorMessages(failureMessage, `Shape mismatch:\n${indent(errorMessages, 1)}`); super(message); this.value = value; 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'); }