@ethereumjs/rlp
Version:
Recursive Length Prefix Encoding Module
58 lines (52 loc) • 1.67 kB
text/typescript
/**
* Generic EthereumJS error class with metadata attached
*
* Kudos to https://github.com/ChainSafe/lodestar monorepo
* for the inspiration :-)
* See: https://github.com/ChainSafe/lodestar/blob/unstable/packages/utils/src/errors.ts
*/
export type EthereumJSErrorMetaData = Record<string, string | number | null>
export type EthereumJSErrorObject = {
message: string
stack: string
className: string
type: EthereumJSErrorMetaData
}
// In order to update all our errors to use `EthereumJSError`, temporarily include the
// unset error code. All errors throwing this code should be updated to use the relevant
// error code.
export const DEFAULT_ERROR_CODE = 'ETHEREUMJS_DEFAULT_ERROR_CODE'
/**
* Generic EthereumJS error with attached metadata
*/
export class EthereumJSError<T extends { code: string }> extends Error {
type: T
constructor(type: T, message?: string, stack?: string) {
super(message ?? type.code)
this.type = type
if (stack !== undefined) this.stack = stack
}
getMetadata(): EthereumJSErrorMetaData {
return this.type
}
/**
* Get the metadata and the stacktrace for the error.
*/
toObject(): EthereumJSErrorObject {
return {
type: this.getMetadata(),
message: this.message ?? '',
stack: this.stack ?? '',
className: this.constructor.name,
}
}
}
/**
* @deprecated Use `EthereumJSError` with a set error code instead
* @param message Optional error message
* @param stack Optional stack trace
* @returns
*/
export function EthereumJSErrorWithoutCode(message?: string, stack?: string) {
return new EthereumJSError({ code: DEFAULT_ERROR_CODE }, message, stack)
}