fix(core): Improve handling of wrapped errors (#8510)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™ 2024-01-31 15:34:22 +01:00 committed by GitHub
parent f1910a10a6
commit 670af167e6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 15 additions and 6 deletions

View file

@ -39,12 +39,15 @@ export abstract class NodeError extends ExecutionBaseError {
readonly node: INode, readonly node: INode,
error: Error | JsonObject, error: Error | JsonObject,
) { ) {
if (error instanceof NodeError) return error;
const isError = error instanceof Error; const isError = error instanceof Error;
const message = isError ? error.message : ''; const message = isError ? error.message : '';
const options = isError ? { cause: error } : { errorResponse: error }; const options = isError ? { cause: error } : { errorResponse: error };
super(message, options); super(message, options);
if (error instanceof NodeError) {
this.level = 'error';
this.message = `[RE-WRAPPED]: ${message}`;
}
} }
/** /**

View file

@ -6,11 +6,17 @@ import { NodeOperationError } from '@/errors/node-operation.error';
describe('NodeError', () => { describe('NodeError', () => {
const node = mock<INode>(); const node = mock<INode>();
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 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(wrapped1.level).toEqual('error');
expect(new NodeOperationError(node, opsError)).toEqual(opsError); 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');
}); });
}); });