(
...[
errorDescriptor,
messageArgumentsOrParentError,
parentError,
]: HardhatErrorConstructorArguments<ErrorDescriptorT>
)
| 62 | readonly #formattedMessage: string; |
| 63 | |
| 64 | constructor( |
| 65 | ...[ |
| 66 | errorDescriptor, |
| 67 | messageArgumentsOrParentError, |
| 68 | parentError, |
| 69 | ]: HardhatErrorConstructorArguments<ErrorDescriptorT> |
| 70 | ) { |
| 71 | const errorCode = getErrorCode(errorDescriptor); |
| 72 | |
| 73 | const formattedMessage = |
| 74 | messageArgumentsOrParentError === undefined || |
| 75 | messageArgumentsOrParentError instanceof Error |
| 76 | ? errorDescriptor.messageTemplate |
| 77 | : applyErrorMessageTemplate( |
| 78 | errorDescriptor.messageTemplate, |
| 79 | messageArgumentsOrParentError, |
| 80 | ); |
| 81 | |
| 82 | super( |
| 83 | `${errorCode}: ${formattedMessage}`, |
| 84 | parentError instanceof Error |
| 85 | ? parentError |
| 86 | : messageArgumentsOrParentError instanceof Error |
| 87 | ? messageArgumentsOrParentError |
| 88 | : undefined, |
| 89 | ); |
| 90 | |
| 91 | this.#descriptor = errorDescriptor; |
| 92 | this.#errorCode = errorCode; |
| 93 | this.#formattedMessage = formattedMessage; |
| 94 | |
| 95 | if ( |
| 96 | messageArgumentsOrParentError === undefined || |
| 97 | messageArgumentsOrParentError instanceof Error |
| 98 | ) { |
| 99 | /* eslint-disable @typescript-eslint/consistent-type-assertions -- |
| 100 | Typescript inference get's lost here, but we know that if we didn't get |
| 101 | arguments, it's because the error doesn't have any. */ |
| 102 | this.#arguments = {} as MessageTemplateArguments< |
| 103 | ErrorDescriptorT["messageTemplate"] |
| 104 | >; |
| 105 | } else { |
| 106 | this.#arguments = messageArgumentsOrParentError; |
| 107 | } |
| 108 | |
| 109 | // As this package is going to be used from most of our packages, there's a |
| 110 | // change of users having multiple versions of it. If that happens, they may |
| 111 | // have multiple `HardhatError` classes, so we can't reliably use |
| 112 | // `instanceof` to check if an error is a `HardhatError`. We define a |
| 113 | // pseudo-private field to use it for it. While this is not bulletproof, it |
| 114 | // should be enough for our case, as we won't be changing this class often. |
| 115 | Object.defineProperty(this, IS_HARDHAT_ERROR_PROPERTY_NAME, { |
| 116 | configurable: false, |
| 117 | enumerable: false, |
| 118 | writable: false, |
| 119 | value: true, |
| 120 | }); |
| 121 | } |
nothing calls this directly
no test coverage detected