hardhat 3.2.0 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/dist/src/internal/builtin-global-options.d.ts.map +1 -1
  3. package/dist/src/internal/builtin-global-options.js +14 -1
  4. package/dist/src/internal/builtin-global-options.js.map +1 -1
  5. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts +0 -5
  6. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts.map +1 -1
  7. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js +12 -3
  8. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js.map +1 -1
  9. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.d.ts.map +1 -1
  10. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.js +12 -2
  11. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.js.map +1 -1
  12. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts +9 -3
  13. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts.map +1 -1
  14. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js +65 -42
  15. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js.map +1 -1
  16. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.d.ts +11 -0
  17. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.d.ts.map +1 -0
  18. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js +104 -0
  19. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js.map +1 -0
  20. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.d.ts +6 -0
  21. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.d.ts.map +1 -0
  22. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.js +152 -0
  23. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.js.map +1 -0
  24. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.d.ts +19 -0
  25. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.d.ts.map +1 -0
  26. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.js +104 -0
  27. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.js.map +1 -0
  28. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js +1 -1
  29. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js.map +1 -1
  30. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.d.ts.map +1 -1
  31. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js +8 -8
  32. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js.map +1 -1
  33. package/dist/src/internal/builtin-plugins/network-manager/http-provider.d.ts.map +1 -1
  34. package/dist/src/internal/builtin-plugins/network-manager/http-provider.js +1 -0
  35. package/dist/src/internal/builtin-plugins/network-manager/http-provider.js.map +1 -1
  36. package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts +1 -1
  37. package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts.map +1 -1
  38. package/dist/src/internal/builtin-plugins/network-manager/network-manager.js +63 -7
  39. package/dist/src/internal/builtin-plugins/network-manager/network-manager.js.map +1 -1
  40. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts.map +1 -1
  41. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js +56 -33
  42. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js.map +1 -1
  43. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.d.ts +0 -3
  44. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.d.ts.map +1 -1
  45. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.js +9 -12
  46. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.js.map +1 -1
  47. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.d.ts.map +1 -1
  48. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.js +1 -1
  49. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.js.map +1 -1
  50. package/dist/src/internal/builtin-plugins/node/helpers.d.ts.map +1 -1
  51. package/dist/src/internal/builtin-plugins/node/helpers.js +6 -2
  52. package/dist/src/internal/builtin-plugins/node/helpers.js.map +1 -1
  53. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.d.ts.map +1 -1
  54. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js +4 -0
  55. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js.map +1 -1
  56. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts +5 -1
  57. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts.map +1 -1
  58. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js +86 -47
  59. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js.map +1 -1
  60. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts +1 -0
  61. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts.map +1 -1
  62. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.js.map +1 -1
  63. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts +3 -3
  64. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts.map +1 -1
  65. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js +24 -4
  66. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js.map +1 -1
  67. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.d.ts +16 -0
  68. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.d.ts.map +1 -1
  69. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.js +1 -1
  70. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.js.map +1 -1
  71. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.d.ts.map +1 -1
  72. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js +1 -1
  73. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js.map +1 -1
  74. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.d.ts +2 -2
  75. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.d.ts.map +1 -1
  76. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.js.map +1 -1
  77. package/dist/src/internal/builtin-plugins/solidity/config.d.ts +4 -2
  78. package/dist/src/internal/builtin-plugins/solidity/config.d.ts.map +1 -1
  79. package/dist/src/internal/builtin-plugins/solidity/config.js +247 -68
  80. package/dist/src/internal/builtin-plugins/solidity/config.js.map +1 -1
  81. package/dist/src/internal/builtin-plugins/solidity/exports.d.ts +3 -0
  82. package/dist/src/internal/builtin-plugins/solidity/exports.d.ts.map +1 -0
  83. package/dist/src/internal/builtin-plugins/solidity/exports.js +3 -0
  84. package/dist/src/internal/builtin-plugins/solidity/exports.js.map +1 -0
  85. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.d.ts.map +1 -1
  86. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js +2 -1
  87. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js.map +1 -1
  88. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.d.ts +4 -0
  89. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.d.ts.map +1 -0
  90. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.js +7 -0
  91. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.js.map +1 -0
  92. package/dist/src/internal/builtin-plugins/solidity/index.d.ts.map +1 -1
  93. package/dist/src/internal/builtin-plugins/solidity/index.js +1 -0
  94. package/dist/src/internal/builtin-plugins/solidity/index.js.map +1 -1
  95. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.d.ts +18 -0
  96. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.d.ts.map +1 -0
  97. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js +33 -0
  98. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js.map +1 -0
  99. package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts +201 -28
  100. package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts.map +1 -1
  101. package/dist/src/internal/builtin-plugins/solidity/type-extensions.js.map +1 -1
  102. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.d.ts +12 -6
  103. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.d.ts.map +1 -1
  104. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js +9 -7
  105. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js.map +1 -1
  106. package/dist/src/internal/builtin-plugins/solidity-test/formatters.d.ts +1 -12
  107. package/dist/src/internal/builtin-plugins/solidity-test/formatters.d.ts.map +1 -1
  108. package/dist/src/internal/builtin-plugins/solidity-test/formatters.js +0 -150
  109. package/dist/src/internal/builtin-plugins/solidity-test/formatters.js.map +1 -1
  110. package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts +4 -3
  111. package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts.map +1 -1
  112. package/dist/src/internal/builtin-plugins/solidity-test/helpers.js +5 -9
  113. package/dist/src/internal/builtin-plugins/solidity-test/helpers.js.map +1 -1
  114. package/dist/src/internal/builtin-plugins/solidity-test/index.d.ts.map +1 -1
  115. package/dist/src/internal/builtin-plugins/solidity-test/index.js +0 -7
  116. package/dist/src/internal/builtin-plugins/solidity-test/index.js.map +1 -1
  117. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.d.ts +7 -0
  118. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.d.ts.map +1 -0
  119. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.js +20 -0
  120. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.js.map +1 -0
  121. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.d.ts +24 -0
  122. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.d.ts.map +1 -0
  123. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.js +68 -0
  124. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.js.map +1 -0
  125. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.d.ts +13 -0
  126. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.d.ts.map +1 -0
  127. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.js +136 -0
  128. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.js.map +1 -0
  129. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.d.ts +19 -0
  130. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.d.ts.map +1 -0
  131. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.js +133 -0
  132. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.js.map +1 -0
  133. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.d.ts +10 -0
  134. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.d.ts.map +1 -0
  135. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.js +2 -0
  136. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.js.map +1 -0
  137. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.d.ts +12 -0
  138. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.d.ts.map +1 -0
  139. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.js +81 -0
  140. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.js.map +1 -0
  141. package/dist/src/internal/builtin-plugins/solidity-test/reporter.d.ts +1 -1
  142. package/dist/src/internal/builtin-plugins/solidity-test/reporter.d.ts.map +1 -1
  143. package/dist/src/internal/builtin-plugins/solidity-test/reporter.js +5 -2
  144. package/dist/src/internal/builtin-plugins/solidity-test/reporter.js.map +1 -1
  145. package/dist/src/internal/builtin-plugins/solidity-test/task-action.d.ts +0 -1
  146. package/dist/src/internal/builtin-plugins/solidity-test/task-action.d.ts.map +1 -1
  147. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js +21 -14
  148. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js.map +1 -1
  149. package/dist/src/internal/builtin-plugins/test/index.d.ts.map +1 -1
  150. package/dist/src/internal/builtin-plugins/test/index.js +0 -7
  151. package/dist/src/internal/builtin-plugins/test/index.js.map +1 -1
  152. package/dist/src/internal/builtin-plugins/test/task-action.d.ts +0 -1
  153. package/dist/src/internal/builtin-plugins/test/task-action.d.ts.map +1 -1
  154. package/dist/src/internal/builtin-plugins/test/task-action.js +1 -4
  155. package/dist/src/internal/builtin-plugins/test/task-action.js.map +1 -1
  156. package/dist/src/internal/cli/help/get-help-string.d.ts.map +1 -1
  157. package/dist/src/internal/cli/help/get-help-string.js +1 -1
  158. package/dist/src/internal/cli/help/get-help-string.js.map +1 -1
  159. package/dist/src/internal/cli/init/init.d.ts.map +1 -1
  160. package/dist/src/internal/cli/init/init.js +1 -1
  161. package/dist/src/internal/cli/init/init.js.map +1 -1
  162. package/dist/src/internal/cli/init/prompt.d.ts.map +1 -1
  163. package/dist/src/internal/cli/init/prompt.js +1 -7
  164. package/dist/src/internal/cli/init/prompt.js.map +1 -1
  165. package/dist/src/internal/core/hre.d.ts +2 -1
  166. package/dist/src/internal/core/hre.d.ts.map +1 -1
  167. package/dist/src/internal/core/hre.js +18 -0
  168. package/dist/src/internal/core/hre.js.map +1 -1
  169. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.d.ts.map +1 -1
  170. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.js +6 -1
  171. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.js.map +1 -1
  172. package/dist/src/internal/core/user-interruptions.d.ts.map +1 -1
  173. package/dist/src/internal/core/user-interruptions.js +2 -5
  174. package/dist/src/internal/core/user-interruptions.js.map +1 -1
  175. package/dist/src/internal/utils/colorizer.d.ts +10 -0
  176. package/dist/src/internal/utils/colorizer.d.ts.map +1 -0
  177. package/dist/src/internal/utils/colorizer.js +2 -0
  178. package/dist/src/internal/utils/colorizer.js.map +1 -0
  179. package/dist/src/internal/utils/package.d.ts.map +1 -1
  180. package/dist/src/internal/utils/package.js +1 -1
  181. package/dist/src/internal/utils/package.js.map +1 -1
  182. package/dist/src/types/global-options.d.ts +1 -0
  183. package/dist/src/types/global-options.d.ts.map +1 -1
  184. package/dist/src/types/hooks.d.ts +32 -0
  185. package/dist/src/types/hooks.d.ts.map +1 -1
  186. package/dist/src/types/solidity/compilation-job.d.ts +5 -5
  187. package/dist/src/types/solidity/compilation-job.d.ts.map +1 -1
  188. package/dist/src/types/solidity/solidity-artifacts.d.ts +15 -0
  189. package/dist/src/types/solidity/solidity-artifacts.d.ts.map +1 -1
  190. package/package.json +6 -5
  191. package/src/internal/builtin-global-options.ts +15 -1
  192. package/src/internal/builtin-plugins/gas-analytics/helpers.ts +13 -3
  193. package/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.ts +25 -3
  194. package/src/internal/builtin-plugins/network-manager/edr/edr-provider.ts +107 -56
  195. package/src/internal/builtin-plugins/network-manager/edr/genesis-state.ts +179 -0
  196. package/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.ts +197 -0
  197. package/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.ts +137 -0
  198. package/src/internal/builtin-plugins/network-manager/hook-handlers/hre.ts +1 -0
  199. package/src/internal/builtin-plugins/network-manager/hook-handlers/network.ts +8 -11
  200. package/src/internal/builtin-plugins/network-manager/http-provider.ts +1 -0
  201. package/src/internal/builtin-plugins/network-manager/network-manager.ts +83 -10
  202. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.ts +98 -34
  203. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.ts +10 -30
  204. package/src/internal/builtin-plugins/node/artifacts/build-info-watcher.ts +1 -2
  205. package/src/internal/builtin-plugins/node/helpers.ts +9 -2
  206. package/src/internal/builtin-plugins/solidity/build-system/artifacts.ts +7 -2
  207. package/src/internal/builtin-plugins/solidity/build-system/build-system.ts +141 -65
  208. package/src/internal/builtin-plugins/solidity/build-system/cache.ts +1 -0
  209. package/src/internal/builtin-plugins/solidity/build-system/compilation-job.ts +34 -7
  210. package/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.ts +1 -1
  211. package/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.ts +1 -2
  212. package/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.ts +4 -2
  213. package/src/internal/builtin-plugins/solidity/config.ts +335 -110
  214. package/src/internal/builtin-plugins/solidity/exports.ts +2 -0
  215. package/src/internal/builtin-plugins/solidity/hook-handlers/config.ts +3 -0
  216. package/src/internal/builtin-plugins/solidity/hook-handlers/solidity.ts +9 -0
  217. package/src/internal/builtin-plugins/solidity/index.ts +1 -0
  218. package/src/internal/builtin-plugins/solidity/solidity-hooks.ts +53 -0
  219. package/src/internal/builtin-plugins/solidity/type-extensions.ts +258 -31
  220. package/src/internal/builtin-plugins/solidity-test/edr-artifacts.ts +22 -10
  221. package/src/internal/builtin-plugins/solidity-test/formatters.ts +1 -213
  222. package/src/internal/builtin-plugins/solidity-test/helpers.ts +8 -8
  223. package/src/internal/builtin-plugins/solidity-test/index.ts +0 -7
  224. package/src/internal/builtin-plugins/solidity-test/inline-config/constants.ts +21 -0
  225. package/src/internal/builtin-plugins/solidity-test/inline-config/helpers.ts +99 -0
  226. package/src/internal/builtin-plugins/solidity-test/inline-config/index.ts +272 -0
  227. package/src/internal/builtin-plugins/solidity-test/inline-config/parsing.ts +186 -0
  228. package/src/internal/builtin-plugins/solidity-test/inline-config/types.ts +9 -0
  229. package/src/internal/builtin-plugins/solidity-test/inline-config/validation.ts +122 -0
  230. package/src/internal/builtin-plugins/solidity-test/reporter.ts +6 -6
  231. package/src/internal/builtin-plugins/solidity-test/task-action.ts +42 -25
  232. package/src/internal/builtin-plugins/test/index.ts +0 -7
  233. package/src/internal/builtin-plugins/test/task-action.ts +1 -6
  234. package/src/internal/cli/help/get-help-string.ts +2 -2
  235. package/src/internal/cli/init/init.ts +1 -1
  236. package/src/internal/cli/init/prompt.ts +1 -14
  237. package/src/internal/core/hre.ts +33 -0
  238. package/src/internal/core/plugins/detect-plugin-npm-dependency-problems.ts +8 -1
  239. package/src/internal/core/user-interruptions.ts +3 -5
  240. package/src/internal/utils/colorizer.ts +9 -0
  241. package/src/internal/utils/package.ts +1 -2
  242. package/src/types/global-options.ts +1 -0
  243. package/src/types/hooks.ts +37 -0
  244. package/src/types/solidity/compilation-job.ts +5 -5
  245. package/src/types/solidity/solidity-artifacts.ts +16 -0
  246. package/templates/hardhat-3/01-node-test-runner-viem/package.json +5 -5
  247. package/templates/hardhat-3/02-mocha-ethers/package.json +11 -11
  248. package/templates/hardhat-3/03-minimal/package.json +1 -1
@@ -13,6 +13,7 @@ import type {
13
13
  GlobalOptionDefinitions,
14
14
  } from "../../types/global-options.js";
15
15
  import type {
16
+ HardhatConfigValidationError,
16
17
  HardhatUserConfigValidationError,
17
18
  HookContext,
18
19
  HookManager,
@@ -96,6 +97,20 @@ export class HardhatRuntimeEnvironmentImplementation
96
97
  );
97
98
 
98
99
  if (!configResolutionResult.success) {
100
+ if (configResolutionResult.configValidationErrors !== undefined) {
101
+ throw new HardhatError(
102
+ HardhatError.ERRORS.CORE.GENERAL.INVALID_RESOLVED_CONFIG,
103
+ {
104
+ errors: `\t${configResolutionResult.configValidationErrors
105
+ .map(
106
+ (error) =>
107
+ `* Resolved config error in config.${error.path.join(".")}: ${error.message}`,
108
+ )
109
+ .join("\n\t")}`,
110
+ },
111
+ );
112
+ }
113
+
99
114
  throw new HardhatError(HardhatError.ERRORS.CORE.GENERAL.INVALID_CONFIG, {
100
115
  errors: `\t${configResolutionResult.userConfigValidationErrors
101
116
  .map(
@@ -211,6 +226,7 @@ export async function resolveUserConfigToHardhatConfig(
211
226
  | {
212
227
  success: false;
213
228
  userConfigValidationErrors: HardhatUserConfigValidationError[];
229
+ configValidationErrors?: HardhatConfigValidationError[];
214
230
  }
215
231
  > {
216
232
  // extend user config:
@@ -225,6 +241,7 @@ export async function resolveUserConfigToHardhatConfig(
225
241
  extendedUserConfig,
226
242
  );
227
243
 
244
+ // If user config is structurally invalid, we can't resolve — return early.
228
245
  if (userConfigValidationErrors.length > 0) {
229
246
  return {
230
247
  success: false,
@@ -252,6 +269,22 @@ export async function resolveUserConfigToHardhatConfig(
252
269
  plugins: resolvedPlugins,
253
270
  };
254
271
 
272
+ // Validate the resolved config (post-resolution checks).
273
+ const resolvedConfigValidationResults = await hooks.runSequentialHandlers(
274
+ "config",
275
+ "validateResolvedConfig",
276
+ [config],
277
+ );
278
+ const resolvedConfigValidationErrors = resolvedConfigValidationResults.flat();
279
+
280
+ if (resolvedConfigValidationErrors.length > 0) {
281
+ return {
282
+ success: false,
283
+ userConfigValidationErrors: [],
284
+ configValidationErrors: resolvedConfigValidationErrors,
285
+ };
286
+ }
287
+
255
288
  return { success: true, config, extendedUserConfig };
256
289
  }
257
290
 
@@ -1,4 +1,5 @@
1
1
  import type { HardhatPlugin } from "../../../types/plugins.js";
2
+ import type { satisfies as SatisfiesT } from "semver";
2
3
 
3
4
  import path from "node:path";
4
5
 
@@ -9,6 +10,10 @@ import {
9
10
  type PackageJson,
10
11
  } from "@nomicfoundation/hardhat-utils/package";
11
12
 
13
+ // semver is slow to load, and this file is loaded by HookManager, so we lazy
14
+ // load it.
15
+ let satisfies: typeof SatisfiesT | undefined;
16
+
12
17
  /**
13
18
  * Validate that a plugin is installed and that its peer dependencies are
14
19
  * installed and satisfy the version constraints.
@@ -84,7 +89,9 @@ export async function detectPluginNpmDependencyProblems(
84
89
 
85
90
  const installedVersion = dependencyPackageJson.version;
86
91
 
87
- const { satisfies } = await import("semver");
92
+ if (satisfies === undefined) {
93
+ ({ satisfies } = await import("semver"));
94
+ }
88
95
 
89
96
  if (!satisfies(installedVersion, versionSpec.replace("workspace:", ""))) {
90
97
  throw new HardhatError(
@@ -1,8 +1,11 @@
1
1
  import type { HookContext, HookManager } from "../../types/hooks.js";
2
2
  import type { UserInterruptionManager } from "../../types/user-interruptions.js";
3
3
 
4
+ import { createInterface } from "node:readline";
5
+
4
6
  import { assertHardhatInvariant } from "@nomicfoundation/hardhat-errors";
5
7
  import { AsyncMutex } from "@nomicfoundation/hardhat-utils/synchronization";
8
+ import chalk from "chalk";
6
9
 
7
10
  export class UserInterruptionManagerImplementation
8
11
  implements UserInterruptionManager
@@ -68,7 +71,6 @@ async function defaultDisplayMessage(
68
71
  interruptor: string,
69
72
  message: string,
70
73
  ) {
71
- const chalk = (await import("chalk")).default;
72
74
  console.log(chalk.blue(`[${interruptor}]`) + ` ${message}`);
73
75
  }
74
76
 
@@ -77,8 +79,6 @@ async function defaultRequestInput(
77
79
  interruptor: string,
78
80
  inputDescription: string,
79
81
  ): Promise<string> {
80
- const { createInterface } = await import("node:readline");
81
- const chalk = (await import("chalk")).default;
82
82
  const rl = createInterface({
83
83
  input: process.stdin,
84
84
  output: process.stdout,
@@ -100,8 +100,6 @@ async function defaultRequestSecretInput(
100
100
  interruptor: string,
101
101
  inputDescription: string,
102
102
  ): Promise<string> {
103
- const { createInterface } = await import("node:readline");
104
- const chalk = (await import("chalk")).default;
105
103
  const rl = createInterface({
106
104
  input: process.stdin,
107
105
  output: process.stdout,
@@ -0,0 +1,9 @@
1
+ export interface Colorizer {
2
+ blue: (text: string) => string;
3
+ green: (text: string) => string;
4
+ red: (text: string) => string;
5
+ cyan: (text: string) => string;
6
+ yellow: (text: string) => string;
7
+ grey: (text: string) => string;
8
+ dim: (text: string) => string;
9
+ }
@@ -7,6 +7,7 @@ import {
7
7
  findDependencyPackageJson,
8
8
  readClosestPackageJson,
9
9
  } from "@nomicfoundation/hardhat-utils/package";
10
+ import { getRequest } from "@nomicfoundation/hardhat-utils/request";
10
11
 
11
12
  let cachedHardhatVersion: string | undefined;
12
13
  let cachedLatestHardhatVersion: string | undefined;
@@ -50,8 +51,6 @@ export async function getEdrVersion(): Promise<string> {
50
51
  }
51
52
 
52
53
  export async function getLatestHardhatVersion(): Promise<string> {
53
- const { getRequest } = await import("@nomicfoundation/hardhat-utils/request");
54
-
55
54
  if (cachedLatestHardhatVersion !== undefined) {
56
55
  return cachedLatestHardhatVersion;
57
56
  }
@@ -21,6 +21,7 @@ export interface GlobalOptions {
21
21
  help: boolean;
22
22
  init: boolean;
23
23
  showStackTraces: boolean;
24
+ verbosity: number;
24
25
  version: boolean;
25
26
  }
26
27
 
@@ -93,6 +93,20 @@ export interface ConfigHooks {
93
93
  nextResolveConfigurationVariable: ConfigurationVariableResolver,
94
94
  ) => Promise<HardhatConfig>,
95
95
  ) => Promise<HardhatConfig>;
96
+
97
+ /**
98
+ * Provide a handler for this hook to validate the resolved config.
99
+ *
100
+ * This hook runs after all plugins have resolved their config. Use it to
101
+ * validate cross-cutting concerns that require the fully resolved config
102
+ * (e.g., checking that all compiler types are registered).
103
+ *
104
+ * @param resolvedConfig The fully resolved config.
105
+ * @returns An array of validation errors.
106
+ */
107
+ validateResolvedConfig: (
108
+ resolvedConfig: HardhatConfig,
109
+ ) => Promise<HardhatConfigValidationError[]>;
96
110
  }
97
111
 
98
112
  /**
@@ -114,6 +128,29 @@ export interface HardhatUserConfigValidationError {
114
128
  message: string;
115
129
  }
116
130
 
131
+ /**
132
+ * A `HardhatConfig` validation error.
133
+ *
134
+ * This is the equivalent of `HardhatUserConfigValidationError` but for the
135
+ * resolved config.
136
+ */
137
+ export interface HardhatConfigValidationError {
138
+ /**
139
+ * The path from the resolved config object to the value that originated this
140
+ * validation error.
141
+ *
142
+ * For example, if `config.solidity.profiles.foo.compilers[0].type` is
143
+ * invalid, this array would be
144
+ * `["solidity", "profiles", "foo", "compilers", 0, "type"]`.
145
+ */
146
+ path: Array<string | number>;
147
+
148
+ /**
149
+ * The error message.
150
+ */
151
+ message: string;
152
+ }
153
+
117
154
  /**
118
155
  * ConfigurationVariable-related hooks.
119
156
  */
@@ -1,9 +1,9 @@
1
1
  import type { CompilerInput } from "./compiler-io.js";
2
2
  import type { DependencyGraph } from "./dependency-graph.js";
3
- import type { SolcConfig } from "../config.js";
3
+ import type { SolidityCompilerConfig } from "../config.js";
4
4
 
5
5
  /**
6
- * A compilation job to be run using solc.
6
+ * A compilation job to be run.
7
7
  */
8
8
  export interface CompilationJob {
9
9
  /**
@@ -13,12 +13,12 @@ export interface CompilationJob {
13
13
  dependencyGraph: DependencyGraph;
14
14
 
15
15
  /**
16
- * The solc config to use.
16
+ * The compiler config to use.
17
17
  */
18
- solcConfig: SolcConfig;
18
+ solcConfig: SolidityCompilerConfig;
19
19
 
20
20
  /**
21
- * The long version of the solc compiler to be used.
21
+ * The long version of the compiler to be used.
22
22
  */
23
23
  solcLongVersion: string;
24
24
 
@@ -14,6 +14,12 @@ export interface SolidityBuildInfo {
14
14
  /**
15
15
  * The id of the build, which is derived from the rest of the data,
16
16
  * guaranteeing that it's unique and deterministic.
17
+ *
18
+ * When `compilerType` is present and is not "solc", the format is:
19
+ * `solc-<major>_<minor>_<patch>-<compiler-type>-<job-hash>`
20
+ *
21
+ * Otherwise (i.e. solc or undefined), the format is:
22
+ * `solc-<major>_<minor>_<patch>-<job-hash>`
17
23
  */
18
24
  readonly id: string;
19
25
 
@@ -27,6 +33,16 @@ export interface SolidityBuildInfo {
27
33
  */
28
34
  readonly solcLongVersion: string;
29
35
 
36
+ /**
37
+ * The compiler type used for this build. If absent or undefined, it means
38
+ * "solc" was used.
39
+ *
40
+ * Note: This is typed as `string` rather than `SolidityCompilerType` because
41
+ * the build info may come from a different Hardhat setup where the compiler
42
+ * type may not be registered in the current type definitions.
43
+ */
44
+ readonly compilerType?: string;
45
+
30
46
  /**
31
47
  * A mapping from user source names to input source names, for the root
32
48
  * files of the build (i.e. the files whose artifacts where being compiled).
@@ -5,22 +5,22 @@
5
5
  "description": "A TypeScript Hardhat project using Node Test Runner and Viem",
6
6
  "type": "module",
7
7
  "devDependencies": {
8
- "hardhat": "workspace:^3.2.0",
8
+ "hardhat": "workspace:^3.3.0",
9
9
  "@nomicfoundation/hardhat-toolbox-viem": "workspace:^5.0.3",
10
- "@nomicfoundation/hardhat-ignition": "workspace:^3.1.0",
10
+ "@nomicfoundation/hardhat-ignition": "workspace:^3.1.1",
11
11
  "@types/node": "^22.8.5",
12
12
  "forge-std": "foundry-rs/forge-std#v1.9.4",
13
13
  "typescript": "~5.8.0",
14
14
  "viem": "^2.43.0"
15
15
  },
16
16
  "peerDependencies": {
17
- "@nomicfoundation/hardhat-ignition-viem": "workspace:^3.1.0",
17
+ "@nomicfoundation/hardhat-ignition-viem": "workspace:^3.1.1",
18
18
  "@nomicfoundation/hardhat-keystore": "workspace:^3.0.5",
19
19
  "@nomicfoundation/hardhat-network-helpers": "workspace:^3.0.4",
20
20
  "@nomicfoundation/hardhat-node-test-runner": "workspace:^3.0.12",
21
21
  "@nomicfoundation/hardhat-viem": "workspace:^3.0.4",
22
22
  "@nomicfoundation/hardhat-viem-assertions": "workspace:^3.0.7",
23
- "@nomicfoundation/hardhat-verify": "workspace:^3.0.12",
24
- "@nomicfoundation/ignition-core": "workspace:^3.1.0"
23
+ "@nomicfoundation/hardhat-verify": "workspace:^3.0.13",
24
+ "@nomicfoundation/ignition-core": "workspace:^3.1.1"
25
25
  }
26
26
  }
@@ -5,10 +5,10 @@
5
5
  "description": "A TypeScript Hardhat project using Mocha and Ethers.js",
6
6
  "type": "module",
7
7
  "devDependencies": {
8
- "hardhat": "workspace:^3.2.0",
8
+ "hardhat": "workspace:^3.3.0",
9
9
  "@nomicfoundation/hardhat-toolbox-mocha-ethers": "workspace:^3.0.3",
10
- "@nomicfoundation/hardhat-ethers": "workspace:^4.0.6",
11
- "@nomicfoundation/hardhat-ignition": "workspace:^3.1.0",
10
+ "@nomicfoundation/hardhat-ethers": "workspace:^4.0.7",
11
+ "@nomicfoundation/hardhat-ignition": "workspace:^3.1.1",
12
12
  "@types/chai": "^5.2.3",
13
13
  "@types/chai-as-promised": "^8.0.1",
14
14
  "@types/mocha": ">=10.0.10",
@@ -20,15 +20,15 @@
20
20
  "typescript": "~5.8.0"
21
21
  },
22
22
  "peerDependencies": {
23
- "@nomicfoundation/hardhat-ethers": "workspace:^4.0.6",
24
- "@nomicfoundation/hardhat-ethers-chai-matchers": "workspace:^3.0.3",
25
- "@nomicfoundation/hardhat-ignition": "workspace:^3.1.0",
26
- "@nomicfoundation/hardhat-ignition-ethers": "workspace:^3.1.0",
23
+ "@nomicfoundation/hardhat-ethers": "workspace:^4.0.7",
24
+ "@nomicfoundation/hardhat-ethers-chai-matchers": "workspace:^3.0.4",
25
+ "@nomicfoundation/hardhat-ignition": "workspace:^3.1.1",
26
+ "@nomicfoundation/hardhat-ignition-ethers": "workspace:^3.1.1",
27
27
  "@nomicfoundation/hardhat-keystore": "workspace:^3.0.5",
28
- "@nomicfoundation/hardhat-mocha": "workspace:^3.0.14",
28
+ "@nomicfoundation/hardhat-mocha": "workspace:^3.0.15",
29
29
  "@nomicfoundation/hardhat-network-helpers": "workspace:^3.0.4",
30
- "@nomicfoundation/hardhat-typechain": "workspace:^3.0.4",
31
- "@nomicfoundation/hardhat-verify": "workspace:^3.0.12",
32
- "@nomicfoundation/ignition-core": "workspace:^3.1.0"
30
+ "@nomicfoundation/hardhat-typechain": "workspace:^3.0.5",
31
+ "@nomicfoundation/hardhat-verify": "workspace:^3.0.13",
32
+ "@nomicfoundation/ignition-core": "workspace:^3.1.1"
33
33
  }
34
34
  }
@@ -5,7 +5,7 @@
5
5
  "description": "A minimal Hardhat project",
6
6
  "type": "module",
7
7
  "devDependencies": {
8
- "hardhat": "workspace:^3.2.0",
8
+ "hardhat": "workspace:^3.3.0",
9
9
  "@types/node": "^22.8.5",
10
10
  "typescript": "~5.8.0"
11
11
  }