From e79dd4bca9bac5783e2e99bf1f55a861752ddea4 Mon Sep 17 00:00:00 2001 From: Joakim Carlstein Date: Wed, 22 Nov 2023 14:16:20 +0100 Subject: [PATCH] feat(storage-fs): serialize errors recursively if "cause" is an Error instance --- .changeset/shiny-penguins-kneel.md | 5 +++++ packages/storage-fs/src/index.ts | 12 +++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 .changeset/shiny-penguins-kneel.md diff --git a/.changeset/shiny-penguins-kneel.md b/.changeset/shiny-penguins-kneel.md new file mode 100644 index 0000000..2010d8d --- /dev/null +++ b/.changeset/shiny-penguins-kneel.md @@ -0,0 +1,5 @@ +--- +'@emigrate/storage-fs': minor +--- + +Serialize errors recursively if they have a "cause" set to an Error instance diff --git a/packages/storage-fs/src/index.ts b/packages/storage-fs/src/index.ts index 05d4801..36d93d4 100644 --- a/packages/storage-fs/src/index.ts +++ b/packages/storage-fs/src/index.ts @@ -11,6 +11,16 @@ type SerializedError = { name: string; message: string; stack?: string; + cause?: unknown; +}; + +const serializeError = (error: Error): SerializedError => { + return { + name: error.name, + message: error.message, + stack: error.stack, + cause: error.cause instanceof Error ? serializeError(error.cause) : error.cause, + }; }; export default function storageFs({ filename }: StorageFsOptions): EmigrateStorage { @@ -41,7 +51,7 @@ export default function storageFs({ filename }: StorageFsOptions): EmigrateStora [migration]: { status, date: new Date().toISOString(), - error: error ? { name: error.name, message: error.message, stack: error.stack } : undefined, + error: error ? serializeError(error) : undefined, }, };