diff options
Diffstat (limited to 'src/util/sugar.js')
-rw-r--r-- | src/util/sugar.js | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/src/util/sugar.js b/src/util/sugar.js index 6718b697..d5f0fbd3 100644 --- a/src/util/sugar.js +++ b/src/util/sugar.js @@ -637,13 +637,31 @@ export function showAggregate(topError, { } } +export function annotateError(error, ...callbacks) { + for (const callback of callbacks) { + error = callback(error) ?? error; + } + + return error; +} + +export function annotateErrorWithIndex(error, index) { + return Object.assign(error, { + [Symbol.for('hsmusic.annotateError.indexInSourceArray')]: + index, + + message: + `(${colors.yellow(`#${index + 1}`)}) ` + + error.message, + }); +} + export function decorateErrorWithIndex(fn) { return (x, index, array) => { try { return fn(x, index, array); } catch (error) { - error.message = `(${colors.yellow(`#${index + 1}`)}) ${error.message}`; - error[Symbol.for('hsmusic.decorate.indexInSourceArray')] = index; + annotateErrorWithIndex(error, index); throw error; } }; @@ -660,6 +678,18 @@ export function decorateErrorWithCause(fn, cause) { }; } +export function annotateErrorWithFile(error, file) { + return Object.assign(error, { + [Symbol.for('hsmusic.annotateError.file')]: + file, + + message: + error.message + + (error.message.includes('\n') ? '\n' : ' ') + + `(file: ${colors.bright(colors.blue(file))})`, + }); +} + export function conditionallySuppressError(conditionFn, callbackFn) { return (...args) => { try { |