MCPcopy Create free account
hub / github.com/NomicFoundation/hardhat / constructor

Method constructor

packages/hardhat-errors/src/errors.ts:64–121  ·  view source on GitHub ↗
(
    ...[
      errorDescriptor,
      messageArgumentsOrParentError,
      parentError,
    ]: HardhatErrorConstructorArguments<ErrorDescriptorT>
  )

Source from the content-addressed store, hash-verified

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 }

Callers

nothing calls this directly

Calls 2

getErrorCodeFunction · 0.85

Tested by

no test coverage detected