From c3f73e6758b313984c4946b221650b4ceb60a078 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: Thu, 11 Jan 2024 12:55:44 +0100 Subject: [PATCH 1/3] fix(core): Prevent NodeErrors from being wrapped multiple times --- packages/workflow/src/errors/abstract/node.error.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/workflow/src/errors/abstract/node.error.ts b/packages/workflow/src/errors/abstract/node.error.ts index 6b22e71adab50..b3524dc831ee5 100644 --- a/packages/workflow/src/errors/abstract/node.error.ts +++ b/packages/workflow/src/errors/abstract/node.error.ts @@ -45,6 +45,8 @@ export abstract class NodeError extends ExecutionBaseError { } this.node = node; + + if (error instanceof NodeError) return error; } /** From 8fc73859d626031129b612f84b4c8febf5e0f6a4 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: Tue, 16 Jan 2024 15:19:28 +0100 Subject: [PATCH 2/3] add a simple unit test --- packages/workflow/test/errors/node.error.test.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 packages/workflow/test/errors/node.error.test.ts diff --git a/packages/workflow/test/errors/node.error.test.ts b/packages/workflow/test/errors/node.error.test.ts new file mode 100644 index 0000000000000..d5dcf1652d2c5 --- /dev/null +++ b/packages/workflow/test/errors/node.error.test.ts @@ -0,0 +1,16 @@ +import { mock } from 'jest-mock-extended'; +import type { INode } from '@/Interfaces'; +import { NodeApiError } from '@/errors/node-api.error'; +import { NodeOperationError } from '@/errors/node-operation.error'; + +describe('NodeError', () => { + const node = mock(); + + it('should prevent errors from being re-wrapped', () => { + const apiError = new NodeApiError(node, mock({ message: 'Some error happened', code: 500 })); + const opsError = new NodeOperationError(node, mock()); + + expect(new NodeOperationError(node, apiError)).toEqual(apiError); + expect(new NodeOperationError(node, opsError)).toEqual(opsError); + }); +}); From 4931730f4f00045b3c129648c5036c66759ff883 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: Tue, 16 Jan 2024 15:39:33 +0100 Subject: [PATCH 3/3] move the check earlier in the constructor --- .../src/errors/abstract/node.error.ts | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/packages/workflow/src/errors/abstract/node.error.ts b/packages/workflow/src/errors/abstract/node.error.ts index b3524dc831ee5..adaa2e4516bc2 100644 --- a/packages/workflow/src/errors/abstract/node.error.ts +++ b/packages/workflow/src/errors/abstract/node.error.ts @@ -35,18 +35,16 @@ const COMMON_ERRORS: IDataObject = { * a value recursively inside an error object. */ export abstract class NodeError extends ExecutionBaseError { - node: INode; - - constructor(node: INode, error: Error | JsonObject) { - if (error instanceof Error) { - super(error.message, { cause: error }); - } else { - super('', { errorResponse: error }); - } - - this.node = node; - + constructor( + 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); } /**