From 670af167e6f2c0e4e45bcc7e0998a371d651f89d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Wed, 31 Jan 2024 15:34:22 +0100 Subject: [PATCH] fix(core): Improve handling of wrapped errors (#8510) --- .../workflow/src/errors/abstract/node.error.ts | 7 +++++-- packages/workflow/test/errors/node.error.test.ts | 14 ++++++++++---- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/workflow/src/errors/abstract/node.error.ts b/packages/workflow/src/errors/abstract/node.error.ts index adaa2e4516..bccfcde099 100644 --- a/packages/workflow/src/errors/abstract/node.error.ts +++ b/packages/workflow/src/errors/abstract/node.error.ts @@ -39,12 +39,15 @@ export abstract class NodeError extends ExecutionBaseError { readonly node: INode, error: Error | JsonObject, ) { - if (error instanceof NodeError) return error; - const isError = error instanceof Error; const message = isError ? error.message : ''; const options = isError ? { cause: error } : { errorResponse: error }; super(message, options); + + if (error instanceof NodeError) { + this.level = 'error'; + this.message = `[RE-WRAPPED]: ${message}`; + } } /** diff --git a/packages/workflow/test/errors/node.error.test.ts b/packages/workflow/test/errors/node.error.test.ts index d5dcf1652d..a66c4f26e0 100644 --- a/packages/workflow/test/errors/node.error.test.ts +++ b/packages/workflow/test/errors/node.error.test.ts @@ -6,11 +6,17 @@ import { NodeOperationError } from '@/errors/node-operation.error'; describe('NodeError', () => { const node = mock(); - it('should prevent errors from being re-wrapped', () => { + it('should update re-wrapped error level and message', () => { const apiError = new NodeApiError(node, mock({ message: 'Some error happened', code: 500 })); - const opsError = new NodeOperationError(node, mock()); + const opsError = new NodeOperationError(node, mock(), { message: 'Some operation failed' }); + const wrapped1 = new NodeOperationError(node, apiError); + const wrapped2 = new NodeOperationError(node, opsError); - expect(new NodeOperationError(node, apiError)).toEqual(apiError); - expect(new NodeOperationError(node, opsError)).toEqual(opsError); + expect(wrapped1.level).toEqual('error'); + expect(wrapped1.message).toEqual( + '[RE-WRAPPED]: The service was not able to process your request', + ); + expect(wrapped2.level).toEqual('error'); + expect(wrapped2.message).toEqual('[RE-WRAPPED]: Some operation failed'); }); });