Allow passing an Error object to wrapError

This commit is contained in:
Daniel Huigens 2025-05-23 18:06:25 +02:00
parent 6df8687c9e
commit f1c6f9c4e4
No known key found for this signature in database
GPG Key ID: CB064A128FA90686
3 changed files with 32 additions and 13 deletions

View File

@ -286,6 +286,18 @@ export class UnknownPacketError extends UnsupportedError {
} }
} }
export class MalformedPacketError extends UnsupportedError {
constructor(...params) {
super(...params);
if (Error.captureStackTrace) {
Error.captureStackTrace(this, UnsupportedError);
}
this.name = 'MalformedPacketError';
}
}
export class UnparseablePacket { export class UnparseablePacket {
constructor(tag, rawContent) { constructor(tag, rawContent) {
this.tag = tag; this.tag = tag;

View File

@ -5,7 +5,8 @@ import {
writePartialLength, writeSimpleLength, writePartialLength, writeSimpleLength,
UnparseablePacket, UnparseablePacket,
UnsupportedError, UnsupportedError,
UnknownPacketError UnknownPacketError,
MalformedPacketError
} from './packet'; } from './packet';
import util from '../util'; import util from '../util';
import enums from '../enums'; import enums from '../enums';
@ -102,7 +103,7 @@ class PacketList extends Array {
await packet.read(parsed.packet, config); await packet.read(parsed.packet, config);
} catch (e) { } catch (e) {
if (!(e instanceof UnsupportedError)) { if (!(e instanceof UnsupportedError)) {
e.name = 'MalformedPacketError'; throw util.wrapError(new MalformedPacketError(`Parsing ${packet.constructor.name} failed`), e);
} }
throw e; throw e;
} }
@ -123,7 +124,7 @@ class PacketList extends Array {
// In case of packet parsing errors, e.name was set to 'MalformedPacketError' above. // In case of packet parsing errors, e.name was set to 'MalformedPacketError' above.
// By default, we throw for these errors. // By default, we throw for these errors.
const throwMalformedPacketError = const throwMalformedPacketError =
e.name === 'MalformedPacketError' && e instanceof MalformedPacketError &&
!config.ignoreMalformedPackets; !config.ignoreMalformedPackets;
// The packets that support streaming are the ones that contain message data. // The packets that support streaming are the ones that contain message data.
// Those are also the ones we want to be more strict about and throw on all errors // Those are also the ones we want to be more strict about and throw on all errors
@ -133,7 +134,7 @@ class PacketList extends Array {
const throwOtherError = !( const throwOtherError = !(
e instanceof UnknownPacketError || e instanceof UnknownPacketError ||
e instanceof UnsupportedError || e instanceof UnsupportedError ||
e.name === 'MalformedPacketError' e instanceof MalformedPacketError
); );
if ( if (
throwUnknownPacketError || throwUnknownPacketError ||

View File

@ -593,17 +593,23 @@ const util = {
}).join('\n'); }).join('\n');
}, },
wrapError: function(message, error) { wrapError: function(error, cause) {
if (!error) { if (!cause) {
return new Error(message); if (error instanceof Error) {
return error;
}
return new Error(error);
} }
if (error instanceof Error) {
// update error message // update error message
try { try {
error.message = message + ': ' + error.message; error.message += ': ' + cause.message;
error.cause = cause;
} catch (e) {} } catch (e) {}
return error; return error;
}
return new Error(error + ': ' + cause.message, { cause });
}, },
/** /**