From 684282f0a45e1fdce53df622b322ee4dcc01db5f Mon Sep 17 00:00:00 2001 From: Julien Fontanet Date: Wed, 17 May 2023 11:29:28 +0200 Subject: [PATCH] fix(mixins/Tasks): correctly serialize errors --- @xen-orchestra/mixins/Tasks.mjs | 15 +++++++++++++++ CHANGELOG.unreleased.md | 1 + 2 files changed, 16 insertions(+) diff --git a/@xen-orchestra/mixins/Tasks.mjs b/@xen-orchestra/mixins/Tasks.mjs index e7eed8765..1d92d4781 100644 --- a/@xen-orchestra/mixins/Tasks.mjs +++ b/@xen-orchestra/mixins/Tasks.mjs @@ -14,6 +14,15 @@ const formatId = timestamp => timestamp.toString(36).padStart(9, '0') const noop = Function.prototype +// Create a serializable object from an error. +const serializeError = error => ({ + ...error, // Copy enumerable properties. + code: error.code, + message: error.message, + name: error.name, + stack: error.stack, +}) + export default class Tasks extends EventEmitter { // contains consolidated logs of all live and finished tasks #store @@ -27,6 +36,12 @@ export default class Tasks extends EventEmitter { this.#tasks.delete(id) }, onTaskUpdate: async taskLog => { + // Error objects are not JSON-ifiable by default + const { result } = taskLog + if (result instanceof Error && result.toJSON === undefined) { + taskLog.result = serializeError(result) + } + try { const { $root } = taskLog diff --git a/CHANGELOG.unreleased.md b/CHANGELOG.unreleased.md index 065cceb0f..1b4fc9e53 100644 --- a/CHANGELOG.unreleased.md +++ b/CHANGELOG.unreleased.md @@ -32,6 +32,7 @@ +- @xen-orchestra/mixins patch - xo-cli minor - xo-web minor