From 558b9ead9c046650040aa438f21eb2e0596100c8 Mon Sep 17 00:00:00 2001 From: Sven Slootweg Date: Sun, 28 Jun 2020 01:17:00 +0200 Subject: [PATCH] Improve multi-level subError rendering (eg. nested 'either') --- src/aggregrate-errors.js | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/aggregrate-errors.js b/src/aggregrate-errors.js index bfef1b2..0740dac 100644 --- a/src/aggregrate-errors.js +++ b/src/aggregrate-errors.js @@ -30,7 +30,7 @@ if (supportsColor.stderr) { closeColor = ""; } -function renderErrorList(errors, isSubErrors = false) { +function renderErrorList(errors, subErrorLevels = 0) { let rephrasedErrors = errors.map((error, i) => { let pathSegments = error.path.map((segment) => { if (segment == null) { @@ -49,25 +49,23 @@ function renderErrorList(errors, isSubErrors = false) { : "└─"; let mainLine = asExpression(() => { - if (pathSegments.length > 0) { - if (isSubErrors) { - return ` ${lineCharacter} ${joinPathSegments(pathSegments)}: ${error.message}`; - } else { - return ` - At ${joinPathSegments(pathSegments)}: ${error.message}`; - } + if (subErrorLevels > 0) { + let message = (pathSegments.length > 0) + ? `${lineCharacter} ${joinPathSegments(pathSegments)}: ${error.message}` + : `${lineCharacter} ${error.message}`; + + return indentString(message, subErrorLevels * 4); } else { - if (isSubErrors) { - return ` ${lineCharacter} ${error.message}`; - } else { - return ` - ${error.message}`; - } + return (pathSegments.length > 0) + ? ` - At ${joinPathSegments(pathSegments)}: ${error.message}` + : ` - ${error.message}`; } }); if (error.subErrors != null && error.subErrors.length > 0) { - let renderedSubErrors = renderErrorList(error.subErrors, true); + let renderedSubErrors = renderErrorList(error.subErrors, subErrorLevels + 1); - return mainLine + "\n" + indentString(renderedSubErrors, 2); + return mainLine + "\n" + renderedSubErrors; } else { return mainLine; }