hardhat 3.2.0 → 3.4.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 (432) hide show
  1. package/CHANGELOG.md +88 -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/artifacts/artifact-manager.d.ts.map +1 -1
  6. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js +5 -13
  7. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js.map +1 -1
  8. package/dist/src/internal/builtin-plugins/console/task-action.d.ts.map +1 -1
  9. package/dist/src/internal/builtin-plugins/console/task-action.js +2 -1
  10. package/dist/src/internal/builtin-plugins/console/task-action.js.map +1 -1
  11. package/dist/src/internal/builtin-plugins/gas-analytics/exports.d.ts +1 -1
  12. package/dist/src/internal/builtin-plugins/gas-analytics/exports.d.ts.map +1 -1
  13. package/dist/src/internal/builtin-plugins/gas-analytics/exports.js +1 -1
  14. package/dist/src/internal/builtin-plugins/gas-analytics/exports.js.map +1 -1
  15. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.d.ts.map +1 -1
  16. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.js +1 -2
  17. package/dist/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.js.map +1 -1
  18. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.d.ts +7 -5
  19. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.d.ts.map +1 -1
  20. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.js +60 -44
  21. package/dist/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.js.map +1 -1
  22. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts +6 -0
  23. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts.map +1 -0
  24. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js +14 -0
  25. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js.map +1 -0
  26. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.d.ts +4 -0
  27. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.d.ts.map +1 -0
  28. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.js +27 -0
  29. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/compat.js.map +1 -0
  30. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.d.ts +36 -0
  31. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.d.ts.map +1 -0
  32. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.js +86 -0
  33. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/utils.js.map +1 -0
  34. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js +1 -1
  35. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js.map +1 -1
  36. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.js +1 -1
  37. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.js.map +1 -1
  38. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.d.ts.map +1 -1
  39. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js +1 -2
  40. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js.map +1 -1
  41. package/dist/src/internal/builtin-plugins/gas-analytics/types.d.ts +10 -2
  42. package/dist/src/internal/builtin-plugins/gas-analytics/types.d.ts.map +1 -1
  43. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.d.ts.map +1 -1
  44. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.js +12 -2
  45. package/dist/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.js.map +1 -1
  46. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts +9 -3
  47. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts.map +1 -1
  48. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js +65 -42
  49. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js.map +1 -1
  50. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.d.ts +11 -0
  51. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.d.ts.map +1 -0
  52. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js +104 -0
  53. package/dist/src/internal/builtin-plugins/network-manager/edr/genesis-state.js.map +1 -0
  54. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.d.ts +4 -4
  55. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.d.ts.map +1 -1
  56. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.js +2 -2
  57. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.js.map +1 -1
  58. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.d.ts +6 -3
  59. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.d.ts.map +1 -1
  60. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.js +23 -5
  61. package/dist/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.js.map +1 -1
  62. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.d.ts.map +1 -1
  63. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js +2 -1
  64. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js.map +1 -1
  65. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.d.ts +6 -0
  66. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.d.ts.map +1 -0
  67. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.js +152 -0
  68. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.js.map +1 -0
  69. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.d.ts +19 -0
  70. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.d.ts.map +1 -0
  71. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.js +104 -0
  72. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.js.map +1 -0
  73. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.d.ts.map +1 -1
  74. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js +23 -1
  75. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/hre.js.map +1 -1
  76. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.d.ts.map +1 -1
  77. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js +25 -17
  78. package/dist/src/internal/builtin-plugins/network-manager/hook-handlers/network.js.map +1 -1
  79. package/dist/src/internal/builtin-plugins/network-manager/http-provider.d.ts.map +1 -1
  80. package/dist/src/internal/builtin-plugins/network-manager/http-provider.js +1 -0
  81. package/dist/src/internal/builtin-plugins/network-manager/http-provider.js.map +1 -1
  82. package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts +12 -2
  83. package/dist/src/internal/builtin-plugins/network-manager/network-manager.d.ts.map +1 -1
  84. package/dist/src/internal/builtin-plugins/network-manager/network-manager.js +149 -26
  85. package/dist/src/internal/builtin-plugins/network-manager/network-manager.js.map +1 -1
  86. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.d.ts.map +1 -1
  87. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.js.map +1 -1
  88. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts +1 -0
  89. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.d.ts.map +1 -1
  90. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js +70 -33
  91. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.js.map +1 -1
  92. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.d.ts +2 -0
  93. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.d.ts.map +1 -1
  94. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.js +19 -12
  95. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.js.map +1 -1
  96. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.d.ts +1 -0
  97. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.d.ts.map +1 -1
  98. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.js +9 -3
  99. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.js.map +1 -1
  100. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.d.ts +2 -0
  101. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.d.ts.map +1 -1
  102. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.js +5 -1
  103. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.js.map +1 -1
  104. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.d.ts +1 -0
  105. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.d.ts.map +1 -1
  106. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.js +5 -1
  107. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.js.map +1 -1
  108. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.d.ts +1 -0
  109. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.d.ts.map +1 -1
  110. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.js +5 -1
  111. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.js.map +1 -1
  112. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.d.ts +1 -0
  113. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.d.ts.map +1 -1
  114. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.js +5 -1
  115. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.js.map +1 -1
  116. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.d.ts +0 -3
  117. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.d.ts.map +1 -1
  118. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.js +9 -12
  119. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.js.map +1 -1
  120. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/types.d.ts +9 -0
  121. package/dist/src/internal/builtin-plugins/network-manager/request-handlers/types.d.ts.map +1 -1
  122. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.d.ts +2 -0
  123. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.d.ts.map +1 -0
  124. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.js +3 -0
  125. package/dist/src/internal/builtin-plugins/network-manager/revert-error-code.js.map +1 -0
  126. package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts +1 -1
  127. package/dist/src/internal/builtin-plugins/network-manager/type-extensions/config.d.ts.map +1 -1
  128. package/dist/src/internal/builtin-plugins/network-manager/type-validation.d.ts.map +1 -1
  129. package/dist/src/internal/builtin-plugins/network-manager/type-validation.js +2 -1
  130. package/dist/src/internal/builtin-plugins/network-manager/type-validation.js.map +1 -1
  131. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.d.ts.map +1 -1
  132. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.js +1 -1
  133. package/dist/src/internal/builtin-plugins/node/artifacts/build-info-watcher.js.map +1 -1
  134. package/dist/src/internal/builtin-plugins/node/helpers.d.ts.map +1 -1
  135. package/dist/src/internal/builtin-plugins/node/helpers.js +6 -2
  136. package/dist/src/internal/builtin-plugins/node/helpers.js.map +1 -1
  137. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.d.ts.map +1 -1
  138. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.js +8 -2
  139. package/dist/src/internal/builtin-plugins/node/json-rpc/handler.js.map +1 -1
  140. package/dist/src/internal/builtin-plugins/node/task-action.js +2 -2
  141. package/dist/src/internal/builtin-plugins/node/task-action.js.map +1 -1
  142. package/dist/src/internal/builtin-plugins/run/task-action.d.ts.map +1 -1
  143. package/dist/src/internal/builtin-plugins/run/task-action.js +2 -1
  144. package/dist/src/internal/builtin-plugins/run/task-action.js.map +1 -1
  145. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.d.ts.map +1 -1
  146. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js +7 -0
  147. package/dist/src/internal/builtin-plugins/solidity/build-system/artifacts.js.map +1 -1
  148. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts +6 -2
  149. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts.map +1 -1
  150. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js +198 -76
  151. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js.map +1 -1
  152. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts +3 -0
  153. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.d.ts.map +1 -1
  154. package/dist/src/internal/builtin-plugins/solidity/build-system/cache.js.map +1 -1
  155. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts +5 -3
  156. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.d.ts.map +1 -1
  157. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js +35 -7
  158. package/dist/src/internal/builtin-plugins/solidity/build-system/compilation-job.js.map +1 -1
  159. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.d.ts +16 -0
  160. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.d.ts.map +1 -1
  161. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.js +1 -1
  162. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.js.map +1 -1
  163. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.d.ts.map +1 -1
  164. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js +1 -1
  165. package/dist/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.js.map +1 -1
  166. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.d.ts.map +1 -1
  167. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.js +5 -5
  168. package/dist/src/internal/builtin-plugins/solidity/build-system/dependency-graph.js.map +1 -1
  169. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.d.ts +2 -2
  170. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.d.ts.map +1 -1
  171. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.js.map +1 -1
  172. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.d.ts.map +1 -1
  173. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.js +1 -0
  174. package/dist/src/internal/builtin-plugins/solidity/build-system/solc-info.js.map +1 -1
  175. package/dist/src/internal/builtin-plugins/solidity/build-system/warning-suppression.js +2 -2
  176. package/dist/src/internal/builtin-plugins/solidity/build-system/warning-suppression.js.map +1 -1
  177. package/dist/src/internal/builtin-plugins/solidity/config.d.ts +4 -2
  178. package/dist/src/internal/builtin-plugins/solidity/config.d.ts.map +1 -1
  179. package/dist/src/internal/builtin-plugins/solidity/config.js +266 -84
  180. package/dist/src/internal/builtin-plugins/solidity/config.js.map +1 -1
  181. package/dist/src/internal/builtin-plugins/solidity/constants.d.ts +3 -0
  182. package/dist/src/internal/builtin-plugins/solidity/constants.d.ts.map +1 -0
  183. package/dist/src/internal/builtin-plugins/solidity/constants.js +19 -0
  184. package/dist/src/internal/builtin-plugins/solidity/constants.js.map +1 -0
  185. package/dist/src/internal/builtin-plugins/solidity/exports.d.ts +3 -0
  186. package/dist/src/internal/builtin-plugins/solidity/exports.d.ts.map +1 -0
  187. package/dist/src/internal/builtin-plugins/solidity/exports.js +3 -0
  188. package/dist/src/internal/builtin-plugins/solidity/exports.js.map +1 -0
  189. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.d.ts.map +1 -1
  190. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js +2 -1
  191. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/config.js.map +1 -1
  192. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.d.ts +4 -0
  193. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.d.ts.map +1 -0
  194. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.js +7 -0
  195. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/solidity.js.map +1 -0
  196. package/dist/src/internal/builtin-plugins/solidity/index.d.ts.map +1 -1
  197. package/dist/src/internal/builtin-plugins/solidity/index.js +1 -0
  198. package/dist/src/internal/builtin-plugins/solidity/index.js.map +1 -1
  199. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.d.ts +18 -0
  200. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.d.ts.map +1 -0
  201. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js +33 -0
  202. package/dist/src/internal/builtin-plugins/solidity/solidity-hooks.js.map +1 -0
  203. package/dist/src/internal/builtin-plugins/solidity/tasks/build.d.ts +1 -1
  204. package/dist/src/internal/builtin-plugins/solidity/tasks/build.d.ts.map +1 -1
  205. package/dist/src/internal/builtin-plugins/solidity/tasks/build.js +225 -55
  206. package/dist/src/internal/builtin-plugins/solidity/tasks/build.js.map +1 -1
  207. package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts +227 -28
  208. package/dist/src/internal/builtin-plugins/solidity/type-extensions.d.ts.map +1 -1
  209. package/dist/src/internal/builtin-plugins/solidity/type-extensions.js.map +1 -1
  210. package/dist/src/internal/builtin-plugins/solidity-test/config.d.ts.map +1 -1
  211. package/dist/src/internal/builtin-plugins/solidity-test/config.js +5 -3
  212. package/dist/src/internal/builtin-plugins/solidity-test/config.js.map +1 -1
  213. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.d.ts +12 -6
  214. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.d.ts.map +1 -1
  215. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js +9 -7
  216. package/dist/src/internal/builtin-plugins/solidity-test/edr-artifacts.js.map +1 -1
  217. package/dist/src/internal/builtin-plugins/solidity-test/formatters.d.ts +1 -12
  218. package/dist/src/internal/builtin-plugins/solidity-test/formatters.d.ts.map +1 -1
  219. package/dist/src/internal/builtin-plugins/solidity-test/formatters.js +0 -150
  220. package/dist/src/internal/builtin-plugins/solidity-test/formatters.js.map +1 -1
  221. package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts +4 -5
  222. package/dist/src/internal/builtin-plugins/solidity-test/helpers.d.ts.map +1 -1
  223. package/dist/src/internal/builtin-plugins/solidity-test/helpers.js +5 -12
  224. package/dist/src/internal/builtin-plugins/solidity-test/helpers.js.map +1 -1
  225. package/dist/src/internal/builtin-plugins/solidity-test/index.d.ts.map +1 -1
  226. package/dist/src/internal/builtin-plugins/solidity-test/index.js +0 -7
  227. package/dist/src/internal/builtin-plugins/solidity-test/index.js.map +1 -1
  228. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.d.ts +7 -0
  229. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.d.ts.map +1 -0
  230. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.js +20 -0
  231. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/constants.js.map +1 -0
  232. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.d.ts +24 -0
  233. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.d.ts.map +1 -0
  234. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.js +68 -0
  235. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/helpers.js.map +1 -0
  236. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.d.ts +13 -0
  237. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.d.ts.map +1 -0
  238. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.js +136 -0
  239. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/index.js.map +1 -0
  240. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.d.ts +19 -0
  241. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.d.ts.map +1 -0
  242. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.js +133 -0
  243. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/parsing.js.map +1 -0
  244. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.d.ts +10 -0
  245. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.d.ts.map +1 -0
  246. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.js +2 -0
  247. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/types.js.map +1 -0
  248. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.d.ts +12 -0
  249. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.d.ts.map +1 -0
  250. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.js +81 -0
  251. package/dist/src/internal/builtin-plugins/solidity-test/inline-config/validation.js.map +1 -0
  252. package/dist/src/internal/builtin-plugins/solidity-test/reporter.d.ts +1 -1
  253. package/dist/src/internal/builtin-plugins/solidity-test/reporter.d.ts.map +1 -1
  254. package/dist/src/internal/builtin-plugins/solidity-test/reporter.js +5 -2
  255. package/dist/src/internal/builtin-plugins/solidity-test/reporter.js.map +1 -1
  256. package/dist/src/internal/builtin-plugins/solidity-test/runner.d.ts +2 -8
  257. package/dist/src/internal/builtin-plugins/solidity-test/runner.d.ts.map +1 -1
  258. package/dist/src/internal/builtin-plugins/solidity-test/runner.js +47 -50
  259. package/dist/src/internal/builtin-plugins/solidity-test/runner.js.map +1 -1
  260. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.d.ts.map +1 -1
  261. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js +11 -2
  262. package/dist/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.js.map +1 -1
  263. package/dist/src/internal/builtin-plugins/solidity-test/task-action.d.ts +0 -1
  264. package/dist/src/internal/builtin-plugins/solidity-test/task-action.d.ts.map +1 -1
  265. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js +122 -39
  266. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js.map +1 -1
  267. package/dist/src/internal/builtin-plugins/solidity-test/type-extensions.d.ts +1 -2
  268. package/dist/src/internal/builtin-plugins/solidity-test/type-extensions.d.ts.map +1 -1
  269. package/dist/src/internal/builtin-plugins/test/index.d.ts.map +1 -1
  270. package/dist/src/internal/builtin-plugins/test/index.js +0 -7
  271. package/dist/src/internal/builtin-plugins/test/index.js.map +1 -1
  272. package/dist/src/internal/builtin-plugins/test/task-action.d.ts +0 -1
  273. package/dist/src/internal/builtin-plugins/test/task-action.d.ts.map +1 -1
  274. package/dist/src/internal/builtin-plugins/test/task-action.js +4 -8
  275. package/dist/src/internal/builtin-plugins/test/task-action.js.map +1 -1
  276. package/dist/src/internal/cli/help/get-help-string.d.ts.map +1 -1
  277. package/dist/src/internal/cli/help/get-help-string.js +1 -1
  278. package/dist/src/internal/cli/help/get-help-string.js.map +1 -1
  279. package/dist/src/internal/cli/init/init.d.ts.map +1 -1
  280. package/dist/src/internal/cli/init/init.js +1 -1
  281. package/dist/src/internal/cli/init/init.js.map +1 -1
  282. package/dist/src/internal/cli/init/prompt.d.ts.map +1 -1
  283. package/dist/src/internal/cli/init/prompt.js +1 -7
  284. package/dist/src/internal/cli/init/prompt.js.map +1 -1
  285. package/dist/src/internal/cli/main.d.ts.map +1 -1
  286. package/dist/src/internal/cli/main.js +8 -0
  287. package/dist/src/internal/cli/main.js.map +1 -1
  288. package/dist/src/internal/core/hre.d.ts +2 -1
  289. package/dist/src/internal/core/hre.d.ts.map +1 -1
  290. package/dist/src/internal/core/hre.js +18 -0
  291. package/dist/src/internal/core/hre.js.map +1 -1
  292. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.d.ts.map +1 -1
  293. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.js +6 -1
  294. package/dist/src/internal/core/plugins/detect-plugin-npm-dependency-problems.js.map +1 -1
  295. package/dist/src/internal/core/user-interruptions.d.ts.map +1 -1
  296. package/dist/src/internal/core/user-interruptions.js +2 -5
  297. package/dist/src/internal/core/user-interruptions.js.map +1 -1
  298. package/dist/src/internal/utils/colorizer.d.ts +10 -0
  299. package/dist/src/internal/utils/colorizer.d.ts.map +1 -0
  300. package/dist/src/internal/utils/colorizer.js +2 -0
  301. package/dist/src/internal/utils/colorizer.js.map +1 -0
  302. package/dist/src/internal/utils/package.d.ts.map +1 -1
  303. package/dist/src/internal/utils/package.js +1 -1
  304. package/dist/src/internal/utils/package.js.map +1 -1
  305. package/dist/src/types/artifacts.d.ts +5 -4
  306. package/dist/src/types/artifacts.d.ts.map +1 -1
  307. package/dist/src/types/global-options.d.ts +1 -0
  308. package/dist/src/types/global-options.d.ts.map +1 -1
  309. package/dist/src/types/hooks.d.ts +32 -0
  310. package/dist/src/types/hooks.d.ts.map +1 -1
  311. package/dist/src/types/network.d.ts +39 -0
  312. package/dist/src/types/network.d.ts.map +1 -1
  313. package/dist/src/types/solidity/build-system.d.ts +66 -3
  314. package/dist/src/types/solidity/build-system.d.ts.map +1 -1
  315. package/dist/src/types/solidity/build-system.js.map +1 -1
  316. package/dist/src/types/solidity/compilation-job.d.ts +11 -5
  317. package/dist/src/types/solidity/compilation-job.d.ts.map +1 -1
  318. package/dist/src/types/solidity/solidity-artifacts.d.ts +29 -0
  319. package/dist/src/types/solidity/solidity-artifacts.d.ts.map +1 -1
  320. package/package.json +10 -9
  321. package/src/internal/builtin-global-options.ts +15 -1
  322. package/src/internal/builtin-plugins/artifacts/artifact-manager.ts +9 -15
  323. package/src/internal/builtin-plugins/console/task-action.ts +2 -1
  324. package/src/internal/builtin-plugins/gas-analytics/exports.ts +1 -1
  325. package/src/internal/builtin-plugins/gas-analytics/function-gas-snapshots.ts +1 -2
  326. package/src/internal/builtin-plugins/gas-analytics/gas-analytics-manager.ts +100 -61
  327. package/src/internal/builtin-plugins/gas-analytics/helpers/accessors.ts +31 -0
  328. package/src/internal/builtin-plugins/gas-analytics/helpers/compat.ts +37 -0
  329. package/src/internal/builtin-plugins/gas-analytics/helpers/utils.ts +112 -0
  330. package/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.ts +1 -1
  331. package/src/internal/builtin-plugins/gas-analytics/hook-handlers/test.ts +1 -1
  332. package/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.ts +1 -2
  333. package/src/internal/builtin-plugins/gas-analytics/types.ts +11 -2
  334. package/src/internal/builtin-plugins/network-manager/accounts/derive-private-keys.ts +25 -3
  335. package/src/internal/builtin-plugins/network-manager/edr/edr-provider.ts +107 -56
  336. package/src/internal/builtin-plugins/network-manager/edr/genesis-state.ts +179 -0
  337. package/src/internal/builtin-plugins/network-manager/edr/stack-traces/solidity-stack-trace.ts +4 -0
  338. package/src/internal/builtin-plugins/network-manager/edr/stack-traces/stack-trace-solidity-errors.ts +28 -4
  339. package/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.ts +2 -1
  340. package/src/internal/builtin-plugins/network-manager/edr/utils/trace-formatters.ts +197 -0
  341. package/src/internal/builtin-plugins/network-manager/edr/utils/trace-output.ts +137 -0
  342. package/src/internal/builtin-plugins/network-manager/hook-handlers/hre.ts +30 -0
  343. package/src/internal/builtin-plugins/network-manager/hook-handlers/network.ts +27 -24
  344. package/src/internal/builtin-plugins/network-manager/http-provider.ts +1 -0
  345. package/src/internal/builtin-plugins/network-manager/network-manager.ts +213 -37
  346. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/hd-wallet-handler.ts +1 -0
  347. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/local-accounts.ts +115 -34
  348. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/accounts/sender.ts +25 -17
  349. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/chain-id/chain-id-handler.ts +13 -5
  350. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-handler.ts +7 -1
  351. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/automatic-gas-price-handler.ts +7 -1
  352. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-handler.ts +7 -1
  353. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers/gas/fixed-gas-price-handler.ts +7 -1
  354. package/src/internal/builtin-plugins/network-manager/request-handlers/handlers-array.ts +10 -30
  355. package/src/internal/builtin-plugins/network-manager/request-handlers/types.ts +10 -0
  356. package/src/internal/builtin-plugins/network-manager/revert-error-code.ts +2 -0
  357. package/src/internal/builtin-plugins/network-manager/type-extensions/config.ts +1 -1
  358. package/src/internal/builtin-plugins/network-manager/type-validation.ts +5 -1
  359. package/src/internal/builtin-plugins/node/artifacts/build-info-watcher.ts +1 -2
  360. package/src/internal/builtin-plugins/node/helpers.ts +9 -2
  361. package/src/internal/builtin-plugins/node/json-rpc/handler.ts +10 -2
  362. package/src/internal/builtin-plugins/node/task-action.ts +2 -2
  363. package/src/internal/builtin-plugins/run/task-action.ts +2 -1
  364. package/src/internal/builtin-plugins/solidity/build-system/artifacts.ts +10 -2
  365. package/src/internal/builtin-plugins/solidity/build-system/build-system.ts +297 -99
  366. package/src/internal/builtin-plugins/solidity/build-system/cache.ts +3 -0
  367. package/src/internal/builtin-plugins/solidity/build-system/compilation-job.ts +49 -16
  368. package/src/internal/builtin-plugins/solidity/build-system/compiler/compiler.ts +1 -1
  369. package/src/internal/builtin-plugins/solidity/build-system/compiler/downloader.ts +1 -2
  370. package/src/internal/builtin-plugins/solidity/build-system/dependency-graph.ts +9 -7
  371. package/src/internal/builtin-plugins/solidity/build-system/solc-config-selection.ts +4 -2
  372. package/src/internal/builtin-plugins/solidity/build-system/solc-info.ts +1 -0
  373. package/src/internal/builtin-plugins/solidity/build-system/warning-suppression.ts +2 -2
  374. package/src/internal/builtin-plugins/solidity/config.ts +359 -124
  375. package/src/internal/builtin-plugins/solidity/constants.ts +21 -0
  376. package/src/internal/builtin-plugins/solidity/exports.ts +2 -0
  377. package/src/internal/builtin-plugins/solidity/hook-handlers/config.ts +3 -0
  378. package/src/internal/builtin-plugins/solidity/hook-handlers/solidity.ts +9 -0
  379. package/src/internal/builtin-plugins/solidity/index.ts +1 -0
  380. package/src/internal/builtin-plugins/solidity/solidity-hooks.ts +53 -0
  381. package/src/internal/builtin-plugins/solidity/tasks/build.ts +359 -74
  382. package/src/internal/builtin-plugins/solidity/type-extensions.ts +289 -32
  383. package/src/internal/builtin-plugins/solidity-test/config.ts +11 -2
  384. package/src/internal/builtin-plugins/solidity-test/edr-artifacts.ts +22 -10
  385. package/src/internal/builtin-plugins/solidity-test/formatters.ts +1 -213
  386. package/src/internal/builtin-plugins/solidity-test/helpers.ts +8 -15
  387. package/src/internal/builtin-plugins/solidity-test/index.ts +0 -7
  388. package/src/internal/builtin-plugins/solidity-test/inline-config/constants.ts +21 -0
  389. package/src/internal/builtin-plugins/solidity-test/inline-config/helpers.ts +99 -0
  390. package/src/internal/builtin-plugins/solidity-test/inline-config/index.ts +272 -0
  391. package/src/internal/builtin-plugins/solidity-test/inline-config/parsing.ts +186 -0
  392. package/src/internal/builtin-plugins/solidity-test/inline-config/types.ts +9 -0
  393. package/src/internal/builtin-plugins/solidity-test/inline-config/validation.ts +122 -0
  394. package/src/internal/builtin-plugins/solidity-test/reporter.ts +6 -6
  395. package/src/internal/builtin-plugins/solidity-test/runner.ts +64 -83
  396. package/src/internal/builtin-plugins/solidity-test/stack-trace-solidity-errors.ts +15 -2
  397. package/src/internal/builtin-plugins/solidity-test/task-action.ts +192 -57
  398. package/src/internal/builtin-plugins/solidity-test/type-extensions.ts +1 -2
  399. package/src/internal/builtin-plugins/test/index.ts +0 -7
  400. package/src/internal/builtin-plugins/test/task-action.ts +4 -10
  401. package/src/internal/cli/help/get-help-string.ts +2 -2
  402. package/src/internal/cli/init/init.ts +1 -1
  403. package/src/internal/cli/init/prompt.ts +1 -14
  404. package/src/internal/cli/main.ts +14 -0
  405. package/src/internal/core/hre.ts +33 -0
  406. package/src/internal/core/plugins/detect-plugin-npm-dependency-problems.ts +8 -1
  407. package/src/internal/core/user-interruptions.ts +3 -5
  408. package/src/internal/utils/colorizer.ts +9 -0
  409. package/src/internal/utils/package.ts +1 -2
  410. package/src/types/artifacts.ts +5 -4
  411. package/src/types/global-options.ts +1 -0
  412. package/src/types/hooks.ts +37 -0
  413. package/src/types/network.ts +48 -0
  414. package/src/types/solidity/build-system.ts +66 -3
  415. package/src/types/solidity/compilation-job.ts +12 -5
  416. package/src/types/solidity/solidity-artifacts.ts +32 -0
  417. package/templates/hardhat-2/04-mocha-viem-ts/package.json +1 -1
  418. package/templates/hardhat-3/01-node-test-runner-viem/gitignore +11 -0
  419. package/templates/hardhat-3/01-node-test-runner-viem/package.json +12 -12
  420. package/templates/hardhat-3/01-node-test-runner-viem/scripts/send-op-tx.ts +1 -1
  421. package/templates/hardhat-3/01-node-test-runner-viem/test/Counter.ts +1 -1
  422. package/templates/hardhat-3/02-mocha-ethers/gitignore +11 -0
  423. package/templates/hardhat-3/02-mocha-ethers/package.json +14 -14
  424. package/templates/hardhat-3/02-mocha-ethers/scripts/send-op-tx.ts +1 -1
  425. package/templates/hardhat-3/02-mocha-ethers/test/Counter.ts +1 -1
  426. package/templates/hardhat-3/03-minimal/gitignore +11 -0
  427. package/templates/hardhat-3/03-minimal/package.json +1 -1
  428. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts +0 -19
  429. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.d.ts.map +0 -1
  430. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js +0 -46
  431. package/dist/src/internal/builtin-plugins/gas-analytics/helpers.js.map +0 -1
  432. package/src/internal/builtin-plugins/gas-analytics/helpers.ts +0 -86
@@ -9,7 +9,9 @@ import chalk from "chalk";
9
9
  import debug from "debug";
10
10
  import pMap from "p-map";
11
11
  import { FileBuildResultType } from "../../../../types/solidity/build-system.js";
12
+ import { getHardhatVersion } from "../../../utils/package.js";
12
13
  import { DEFAULT_BUILD_PROFILE } from "../build-profiles.js";
14
+ import { getSolcCompilerForConfig } from "../solidity-hooks.js";
13
15
  import { getArtifactsDeclarationFile, getBuildInfo, getBuildInfoOutput, getContractArtifact, getDuplicatedContractNamesDeclarationFile, } from "./artifacts.js";
14
16
  import { loadCache, saveCache } from "./cache.js";
15
17
  import { CompilationJobImplementation } from "./compilation-job.js";
@@ -21,11 +23,10 @@ import { SolcConfigSelector } from "./solc-config-selection.js";
21
23
  import { shouldSuppressWarning } from "./warning-suppression.js";
22
24
  const log = debug("hardhat:core:solidity:build-system");
23
25
  /**
24
- * Resolves the preferWasm setting for a given solc config, falling back
25
- * to the build profile's preferWasm if not set on the compiler.
26
+ * Returns true if the given compiler config is a SolcSolidityCompilerConfig.
26
27
  */
27
- function resolvePreferWasm(solcConfig, buildProfilePreferWasm) {
28
- return solcConfig.preferWasm ?? buildProfilePreferWasm;
28
+ export function isSolcSolidityCompilerConfig(config) {
29
+ return config.type === undefined || config.type === "solc";
29
30
  }
30
31
  // Compiler warnings to suppress from build output.
31
32
  // Each rule specifies a warning message and the source file it applies to.
@@ -60,25 +61,43 @@ export class SolidityBuildSystemImplementation {
60
61
  this.#options = options;
61
62
  }
62
63
  async getScope(fsPath) {
63
- if (fsPath.startsWith(this.#options.solidityTestsPath) &&
64
+ if (fsPath.startsWith(this.#options.solidityTestsPath + path.sep) &&
64
65
  fsPath.endsWith(".sol")) {
65
66
  return "tests";
66
67
  }
67
- for (const sourcesPath of this.#options.soliditySourcesPaths) {
68
- if (fsPath.startsWith(sourcesPath) && fsPath.endsWith(".t.sol")) {
69
- return "tests";
68
+ if (fsPath.endsWith(".t.sol")) {
69
+ for (const sourcesPath of this.#options.soliditySourcesPaths) {
70
+ if (fsPath.startsWith(sourcesPath + path.sep)) {
71
+ return "tests";
72
+ }
70
73
  }
71
74
  }
72
75
  return "contracts";
73
76
  }
74
77
  async getRootFilePaths(options = {}) {
75
78
  const scope = options.scope ?? "contracts";
79
+ const unified = !this.#options.solidityConfig.splitTestsCompilation;
80
+ this.#ensureSplitCompilationModeIfTestsScope(scope);
76
81
  switch (scope) {
77
- case "contracts":
78
- const localFilesToCompile = (await Promise.all(this.#options.soliditySourcesPaths.map((dir) => getAllFilesMatching(dir, (f) => f.endsWith(".sol") && !f.endsWith(".t.sol"))))).flat(1);
82
+ case "contracts": {
83
+ const localContractFiles = (await Promise.all(this.#options.soliditySourcesPaths.map((dir) => getAllFilesMatching(dir, (f) => f.endsWith(".sol") && !f.endsWith(".t.sol"))))).flat(1);
79
84
  const npmFilesToBuild = this.#options.solidityConfig.npmFilesToBuild.map(npmModuleToNpmRootPath);
80
- return [...localFilesToCompile, ...npmFilesToBuild];
81
- case "tests":
85
+ if (!unified) {
86
+ return [...localContractFiles, ...npmFilesToBuild];
87
+ }
88
+ // In unified mode, contracts scope returns all roots: contracts,
89
+ // tests, and npm files.
90
+ const testFiles = (await Promise.all([
91
+ getAllFilesMatching(this.#options.solidityTestsPath, (f) => f.endsWith(".sol")),
92
+ ...this.#options.soliditySourcesPaths.map(async (dir) => {
93
+ return getAllFilesMatching(dir, (f) => f.endsWith(".t.sol"));
94
+ }),
95
+ ])).flat(1);
96
+ // Remove duplicates in case there is an intersection between
97
+ // the tests.solidity paths and the sources paths
98
+ return Array.from(new Set([...localContractFiles, ...npmFilesToBuild, ...testFiles]));
99
+ }
100
+ case "tests": {
82
101
  let rootFilePaths = (await Promise.all([
83
102
  getAllFilesMatching(this.#options.solidityTestsPath, (f) => f.endsWith(".sol")),
84
103
  ...this.#options.soliditySourcesPaths.map(async (dir) => {
@@ -89,32 +108,34 @@ export class SolidityBuildSystemImplementation {
89
108
  // the tests.solidity paths and the sources paths
90
109
  rootFilePaths = Array.from(new Set(rootFilePaths));
91
110
  return rootFilePaths;
111
+ }
92
112
  }
93
113
  }
94
114
  isSuccessfulBuildResult(buildResult) {
95
115
  return buildResult instanceof Map;
96
116
  }
97
- async build(rootFilePaths, _options) {
98
- return this.#hooks.runHandlerChain("solidity", "build", [rootFilePaths, _options], async (_context, nextRootFilePaths, nextOptions) => this.#build(nextRootFilePaths, nextOptions));
117
+ async build(rootFilePaths, options) {
118
+ this.#ensureSplitCompilationModeIfTestsScope(options?.scope);
119
+ return this.#hooks.runHandlerChain("solidity", "build", [rootFilePaths, options], async (_context, nextRootFilePaths, nextOptions) => this.#build(nextRootFilePaths, nextOptions));
99
120
  }
100
- async #build(rootFilePaths, _options) {
101
- const options = {
121
+ async #build(rootFilePaths, options) {
122
+ const resolvedOptions = {
102
123
  buildProfile: DEFAULT_BUILD_PROFILE,
103
124
  concurrency: Math.max(os.cpus().length - 1, 1),
104
125
  force: false,
105
126
  isolated: false,
106
127
  quiet: false,
107
128
  scope: "contracts",
108
- ..._options,
129
+ ...options,
109
130
  };
110
- await this.#downloadConfiguredCompilers(options.quiet);
111
- const { buildProfile } = this.#getBuildProfile(options.buildProfile);
112
- const compilationJobsResult = await this.getCompilationJobs(rootFilePaths, options);
131
+ await this.#downloadConfiguredCompilers(resolvedOptions.quiet);
132
+ const { buildProfile } = this.#getBuildProfile(resolvedOptions.buildProfile);
133
+ const compilationJobsResult = await this.getCompilationJobs(rootFilePaths, resolvedOptions);
113
134
  if (!compilationJobsResult.success) {
114
135
  return compilationJobsResult;
115
136
  }
116
137
  const spinner = createSpinner({
117
- text: `Compiling your Solidity ${options.scope}...`,
138
+ text: `Compiling your Solidity ${resolvedOptions.scope}...`,
118
139
  enabled: true,
119
140
  });
120
141
  spinner.start();
@@ -127,14 +148,14 @@ export class SolidityBuildSystemImplementation {
127
148
  // internally in each compilation job
128
149
  await Promise.all(runnableCompilationJobs.map(async (runnableCompilationJob) => runnableCompilationJob.getBuildId()));
129
150
  const results = await pMap(runnableCompilationJobs, async (runnableCompilationJob) => {
130
- const { output, compiler } = await this.runCompilationJob(runnableCompilationJob, options);
151
+ const { output, compiler } = await this.runCompilationJob(runnableCompilationJob, resolvedOptions);
131
152
  return {
132
153
  compilationJob: runnableCompilationJob,
133
154
  compilerOutput: output,
134
155
  compiler,
135
156
  };
136
157
  }, {
137
- concurrency: options.concurrency,
158
+ concurrency: resolvedOptions.concurrency,
138
159
  // An error when running the compiler is not a compilation failure, but
139
160
  // a fatal failure trying to run it, so we just throw on the first error
140
161
  stopOnError: true,
@@ -145,11 +166,11 @@ export class SolidityBuildSystemImplementation {
145
166
  if (isSuccessfulBuild) {
146
167
  log("Emitting artifacts of successful build");
147
168
  await Promise.all(results.map(async (compilationResult) => {
148
- const emitArtifactsResult = await this.emitArtifacts(compilationResult.compilationJob, compilationResult.compilerOutput, options);
169
+ const emitArtifactsResult = await this.emitArtifacts(compilationResult.compilationJob, compilationResult.compilerOutput, resolvedOptions);
149
170
  const { artifactsPerFile } = emitArtifactsResult;
150
171
  contractArtifactsGeneratedByCompilationJob.set(compilationResult.compilationJob, artifactsPerFile);
151
172
  // Cache the results
152
- await this.#cacheCompilationResult(indexedIndividualJobs, compilationResult, emitArtifactsResult, buildProfile.isolated, options.scope);
173
+ await this.#cacheCompilationResult(indexedIndividualJobs, compilationResult, emitArtifactsResult, buildProfile.isolated, resolvedOptions.scope);
153
174
  }));
154
175
  await saveCache(this.#options.cachePath, this.#compileCache);
155
176
  }
@@ -188,10 +209,10 @@ export class SolidityBuildSystemImplementation {
188
209
  contractArtifactsGenerated: cacheHitInfo.artifactPaths,
189
210
  });
190
211
  }
191
- if (!options.quiet) {
212
+ if (!resolvedOptions.quiet) {
192
213
  if (isSuccessfulBuild) {
193
214
  await this.#printCompilationResult(runnableCompilationJobs, {
194
- scope: options.scope,
215
+ scope: resolvedOptions.scope,
195
216
  });
196
217
  }
197
218
  }
@@ -202,11 +223,16 @@ export class SolidityBuildSystemImplementation {
202
223
  }
203
224
  }
204
225
  async getCompilationJobs(rootFilePaths, options) {
226
+ this.#ensureSplitCompilationModeIfTestsScope(options?.scope);
205
227
  await this.#downloadConfiguredCompilers(options?.quiet);
206
228
  const dependencyGraph = await buildDependencyGraph(rootFilePaths.toSorted(), // We sort them to have a deterministic order
207
229
  this.#options.projectRoot, readSourceFileFactory(this.#hooks), this.#hooks);
208
230
  const { buildProfileName, buildProfile } = this.#getBuildProfile(options?.buildProfile);
209
231
  log(`Using build profile ${buildProfileName}`);
232
+ let toolVersions;
233
+ if (buildProfile.toolVersionsInBuildInfo === true) {
234
+ toolVersions = { hardhat: await getHardhatVersion() };
235
+ }
210
236
  const solcConfigSelector = new SolcConfigSelector(buildProfileName, buildProfile);
211
237
  let subgraphsWithConfig = [];
212
238
  for (const [rootFile, resolvedFile] of dependencyGraph.getRoots()) {
@@ -219,27 +245,40 @@ export class SolidityBuildSystemImplementation {
219
245
  subgraphsWithConfig.push([configOrError.config, subgraph]);
220
246
  }
221
247
  // get longVersion and isWasm from the compiler for each version
222
- const solcVersionToLongVersion = new Map();
223
- const versionIsWasm = new Map();
224
- for (const [solcConfig] of subgraphsWithConfig) {
225
- let solcLongVersion = solcVersionToLongVersion.get(solcConfig.version);
226
- if (solcLongVersion === undefined) {
227
- const compiler = await getCompiler(solcConfig.version, {
228
- preferWasm: resolvePreferWasm(solcConfig, buildProfile.preferWasm),
229
- compilerPath: solcConfig.path,
230
- });
231
- solcLongVersion = compiler.longVersion;
232
- solcVersionToLongVersion.set(solcConfig.version, solcLongVersion);
233
- versionIsWasm.set(solcConfig.version, compiler.isSolcJs);
248
+ // These maps are keyed by compiler type first, then version, to avoid
249
+ // collisions between different compiler types using the same version string.
250
+ const solidityVersionToLongVersionPerCompilerType = new Map();
251
+ const versionIsWasmPerCompilerType = new Map();
252
+ for (const [compilerConfig] of subgraphsWithConfig) {
253
+ const compilerType = compilerConfig.type ?? "solc";
254
+ let longVersionMap = solidityVersionToLongVersionPerCompilerType.get(compilerType);
255
+ if (longVersionMap === undefined) {
256
+ longVersionMap = new Map();
257
+ solidityVersionToLongVersionPerCompilerType.set(compilerType, longVersionMap);
258
+ }
259
+ let isWasmMap = versionIsWasmPerCompilerType.get(compilerType);
260
+ if (isWasmMap === undefined) {
261
+ isWasmMap = new Map();
262
+ versionIsWasmPerCompilerType.set(compilerType, isWasmMap);
263
+ }
264
+ let longVersion = longVersionMap.get(compilerConfig.version);
265
+ if (longVersion === undefined) {
266
+ const compiler = await this.#hooks.runHandlerChain("solidity", "getCompiler", [compilerConfig], async (_context, cfg) => getSolcCompilerForConfig(cfg, buildProfile.preferWasm));
267
+ longVersion = compiler.longVersion;
268
+ longVersionMap.set(compilerConfig.version, longVersion);
269
+ isWasmMap.set(compilerConfig.version, compiler.isSolcJs);
234
270
  }
235
271
  }
236
272
  // build job for each root file. At this point subgraphsWithConfig are 1 root file each
237
273
  const indexedIndividualJobs = new Map();
238
274
  const sharedContentHashes = new Map();
239
275
  await Promise.all(subgraphsWithConfig.map(async ([config, subgraph]) => {
240
- const solcLongVersion = solcVersionToLongVersion.get(config.version);
241
- assertHardhatInvariant(solcLongVersion !== undefined, "solcLongVersion should not be undefined");
242
- const individualJob = new CompilationJobImplementation(subgraph, config, solcLongVersion, this.#hooks, sharedContentHashes);
276
+ const compilerType = config.type ?? "solc";
277
+ const longVersionMap = solidityVersionToLongVersionPerCompilerType.get(compilerType);
278
+ assertHardhatInvariant(longVersionMap !== undefined, `No long version map for compiler type ${compilerType}`);
279
+ const longVersion = longVersionMap.get(config.version);
280
+ assertHardhatInvariant(longVersion !== undefined, "longVersion should not be undefined");
281
+ const individualJob = new CompilationJobImplementation(subgraph, config, longVersion, this.#hooks, sharedContentHashes, toolVersions);
243
282
  await individualJob.getBuildId(); // precompute
244
283
  indexedIndividualJobs.set(getSingleRootFilePath(subgraph), individualJob);
245
284
  }));
@@ -252,17 +291,34 @@ export class SolidityBuildSystemImplementation {
252
291
  for (const [rootFile, compilationJob] of indexedIndividualJobs.entries()) {
253
292
  const jobHash = await compilationJob.getBuildId();
254
293
  const cacheResult = this.#compileCache[rootFile];
255
- const isWasm = versionIsWasm.get(compilationJob.solcConfig.version);
294
+ const compilerType = compilationJob.solcConfig.type ?? "solc";
295
+ const isWasmMap = versionIsWasmPerCompilerType.get(compilerType);
296
+ assertHardhatInvariant(isWasmMap !== undefined, `No isWasm map for compiler type ${compilerType}`);
297
+ const isWasm = isWasmMap.get(compilationJob.solcConfig.version);
256
298
  assertHardhatInvariant(isWasm !== undefined, `Version ${compilationJob.solcConfig.version} not present in isWasm map`);
257
299
  // If there's no cache for the root file, or the compilation job changed, or using force flag, or isolated mode changed, compile it
258
300
  if (options?.force === true ||
259
301
  cacheResult === undefined ||
260
302
  cacheResult.jobHash !== jobHash ||
261
303
  cacheResult.isolated !== isolated ||
304
+ cacheResult.compilerType !== compilerType ||
262
305
  cacheResult.wasm !== isWasm) {
263
306
  rootFilesToCompile.add(rootFile);
264
307
  continue;
265
308
  }
309
+ // Validate output layout: if the cached layout doesn't match the
310
+ // expected layout for the current config, treat it as a miss.
311
+ // Pre-existing cache entries without these fields are also treated
312
+ // as misses.
313
+ const expectedLayout = await this.#getExpectedOutputLayout(rootFile, options?.scope ?? "contracts");
314
+ if (cacheResult.artifactsDirectory === undefined ||
315
+ cacheResult.emitsTypeDeclarations === undefined ||
316
+ cacheResult.artifactsDirectory !== expectedLayout.artifactsDirectory ||
317
+ cacheResult.emitsTypeDeclarations !==
318
+ expectedLayout.emitsTypeDeclarations) {
319
+ rootFilesToCompile.add(rootFile);
320
+ continue;
321
+ }
266
322
  // If any of the emitted files are not present anymore, compile it
267
323
  const { artifactPaths, buildInfoPath, buildInfoOutputPath, typeFilePath, } = cacheResult;
268
324
  for (const outputFilePath of [
@@ -294,9 +350,11 @@ export class SolidityBuildSystemImplementation {
294
350
  // non-isolated mode
295
351
  log(`Merging compilation jobs`);
296
352
  const mergedSubgraphsByConfig = new Map();
297
- // Note: This groups the subgraphs by solc config. It compares the configs
298
- // based on reference, and not by deep equality. It misses some merging
299
- // opportunities, but this is Hardhat v2's behavior and works well enough.
353
+ // Note: This groups the subgraphs by compiler config. It compares the
354
+ // configs based on reference, and not by deep equality. This is
355
+ // inherently type-aware: two configs with different types will always be
356
+ // different references. It misses some merging opportunities, but this is
357
+ // Hardhat v2's behavior and works well enough.
300
358
  for (const [config, subgraph] of subgraphsWithConfig) {
301
359
  const rootFile = getSingleRootFilePath(subgraph);
302
360
  // Skip root files with cache hit (should not recompile)
@@ -321,10 +379,13 @@ export class SolidityBuildSystemImplementation {
321
379
  });
322
380
  }
323
381
  const compilationJobsPerFile = new Map();
324
- for (const [solcConfig, subgraph] of subgraphsWithConfig) {
325
- const solcLongVersion = solcVersionToLongVersion.get(solcConfig.version);
326
- assertHardhatInvariant(solcLongVersion !== undefined, "solcLongVersion should not be undefined");
327
- const runnableCompilationJob = new CompilationJobImplementation(subgraph, solcConfig, solcLongVersion, this.#hooks, sharedContentHashes);
382
+ for (const [compilerConfig, subgraph] of subgraphsWithConfig) {
383
+ const compilerType = compilerConfig.type ?? "solc";
384
+ const longVersionMap = solidityVersionToLongVersionPerCompilerType.get(compilerType);
385
+ assertHardhatInvariant(longVersionMap !== undefined, `No long version map for compiler type ${compilerType}`);
386
+ const longVersion = longVersionMap.get(compilerConfig.version);
387
+ assertHardhatInvariant(longVersion !== undefined, "longVersion should not be undefined");
388
+ const runnableCompilationJob = new CompilationJobImplementation(subgraph, compilerConfig, longVersion, this.#hooks, sharedContentHashes, toolVersions);
328
389
  for (const [userSourceName, root] of subgraph.getRoots().entries()) {
329
390
  compilationJobsPerFile.set(formatRootPath(userSourceName, root), runnableCompilationJob);
330
391
  }
@@ -353,11 +414,8 @@ export class SolidityBuildSystemImplementation {
353
414
  }
354
415
  const numberOfRootFiles = runnableCompilationJob.dependencyGraph.getRoots().size;
355
416
  const { buildProfile } = this.#getBuildProfile(options?.buildProfile);
356
- const compiler = await getCompiler(runnableCompilationJob.solcConfig.version, {
357
- preferWasm: resolvePreferWasm(runnableCompilationJob.solcConfig, buildProfile.preferWasm),
358
- compilerPath: runnableCompilationJob.solcConfig.path,
359
- });
360
- log(`Compiling ${numberOfRootFiles} root files and ${numberOfFiles - numberOfRootFiles} dependency files with solc ${runnableCompilationJob.solcConfig.version} using ${compiler.compilerPath}`);
417
+ const compiler = await this.#hooks.runHandlerChain("solidity", "getCompiler", [runnableCompilationJob.solcConfig], async (_context, cfg) => getSolcCompilerForConfig(cfg, buildProfile.preferWasm));
418
+ log(`Compiling ${numberOfRootFiles} root files and ${numberOfFiles - numberOfRootFiles} dependency files with ${runnableCompilationJob.solcConfig.type ?? "solc"} ${runnableCompilationJob.solcConfig.version} using ${compiler.compilerPath}`);
361
419
  assertHardhatInvariant(runnableCompilationJob.solcLongVersion === compiler.longVersion, "The long version of the compiler should match the long version of the compilation job");
362
420
  const input = await runnableCompilationJob.getSolcInput();
363
421
  const output = await this.#hooks.runHandlerChain("solidity", "invokeSolc", [compiler, input, runnableCompilationJob.solcConfig], async (_context, nextCompiler, nextSolcInput) => {
@@ -386,6 +444,8 @@ export class SolidityBuildSystemImplementation {
386
444
  }
387
445
  async emitArtifacts(runnableCompilationJob, compilerOutput, options = {}) {
388
446
  const scope = options.scope ?? "contracts";
447
+ this.#ensureSplitCompilationModeIfTestsScope(scope);
448
+ const unified = !this.#options.solidityConfig.splitTestsCompilation;
389
449
  const artifactsPerFile = new Map();
390
450
  const typeFilePaths = new Map();
391
451
  const buildId = await runnableCompilationJob.getBuildId();
@@ -414,8 +474,14 @@ export class SolidityBuildSystemImplementation {
414
474
  }
415
475
  }
416
476
  artifactsPerFile.set(formatRootPath(userSourceName, root), paths);
417
- // Write the type declaration file, only for contracts
418
- if (scope === "contracts") {
477
+ // In split mode, test roots are never part of a "contracts"-scoped pass,
478
+ // so the scope guard below is sufficient. In unified mode, both contract
479
+ // and test roots share the same pass, so we check individually.
480
+ const isTestRoot = unified
481
+ ? (await this.getScope(root.fsPath)) === "tests"
482
+ : false;
483
+ // Write the type declaration file for contract roots only.
484
+ if (scope === "contracts" && !isTestRoot) {
419
485
  const artifactsDeclarationFilePath = path.join(fileFolder, "artifacts.d.ts");
420
486
  typeFilePaths.set(formatRootPath(userSourceName, root), artifactsDeclarationFilePath);
421
487
  const artifactsDeclarationFile = getArtifactsDeclarationFile(artifacts);
@@ -469,13 +535,19 @@ export class SolidityBuildSystemImplementation {
469
535
  };
470
536
  }
471
537
  async getArtifactsDirectory(scope) {
538
+ // In unified mode, both scopes point to the main artifacts directory
539
+ // because contract and test artifacts live together.
540
+ if (!this.#options.solidityConfig.splitTestsCompilation) {
541
+ return this.#options.artifactsPath;
542
+ }
472
543
  return scope === "contracts"
473
544
  ? this.#options.artifactsPath
474
545
  : path.join(this.#options.cachePath, "test-artifacts");
475
546
  }
476
547
  async cleanupArtifacts(rootFilePaths, options = {}) {
477
- log(`Cleaning up artifacts`);
478
548
  const scope = options.scope ?? "contracts";
549
+ this.#ensureSplitCompilationModeIfTestsScope(scope);
550
+ log(`Cleaning up artifacts`);
479
551
  const artifactsDirectory = await this.getArtifactsDirectory(scope);
480
552
  const userSourceNames = rootFilePaths.map((rootFilePath) => {
481
553
  const parsed = parseRootPath(rootFilePath);
@@ -501,7 +573,7 @@ export class SolidityBuildSystemImplementation {
501
573
  }));
502
574
  const reachableBuildInfoIdsSet = new Set(reachableBuildInfoIds.filter((id) => id !== undefined));
503
575
  // Get all the reachable build info files
504
- const buildInfoFiles = await getAllFilesMatching(buildInfosDir, (f) => f.startsWith(buildInfosDir));
576
+ const buildInfoFiles = await getAllFilesMatching(buildInfosDir, (f) => f.startsWith(buildInfosDir + path.sep));
505
577
  for (const buildInfoFile of buildInfoFiles) {
506
578
  const basename = path.basename(buildInfoFile);
507
579
  const id = basename.substring(0, basename.indexOf("."));
@@ -530,8 +602,10 @@ export class SolidityBuildSystemImplementation {
530
602
  }
531
603
  async compileBuildInfo(buildInfo, options) {
532
604
  const quiet = options?.quiet ?? false;
533
- // We download the compiler for the build info as it may not be configured
534
- // in the HH config, hence not downloaded with the other compilers
605
+ // Build info recompilation is always solc-only: build info files are
606
+ // produced by solc and must be recompiled with the same solc version.
607
+ // We bypass both downloadCompilers and getCompiler hooks — this is a
608
+ // self-contained solc replay path, not plugin-configurable compilation.
535
609
  await downloadSolcCompilers(new Set([buildInfo.solcVersion]), quiet);
536
610
  const compiler = await getCompiler(buildInfo.solcVersion, {
537
611
  preferWasm: false,
@@ -544,16 +618,15 @@ export class SolidityBuildSystemImplementation {
544
618
  if (this.#configuredCompilersDownloaded) {
545
619
  return;
546
620
  }
547
- await downloadSolcCompilers(this.#getAllCompilerVersions(), quiet);
621
+ const allSolidityCompilerConfigs = this.#getAllSolidityCompilerConfigs();
622
+ await this.#hooks.runParallelHandlers("solidity", "downloadCompilers", [
623
+ allSolidityCompilerConfigs,
624
+ quiet,
625
+ ]);
548
626
  this.#configuredCompilersDownloaded = true;
549
627
  }
550
- #getAllCompilerVersions() {
551
- return new Set(Object.values(this.#options.solidityConfig.profiles)
552
- .map((profile) => [
553
- ...profile.compilers.map((compiler) => compiler.version),
554
- ...Object.values(profile.overrides).map((override) => override.version),
555
- ])
556
- .flat(1));
628
+ #getAllSolidityCompilerConfigs() {
629
+ return Object.values(this.#options.solidityConfig.profiles).flatMap((profile) => [...profile.compilers, ...Object.values(profile.overrides)]);
557
630
  }
558
631
  #isConsoleLogError(error) {
559
632
  const message = error.message;
@@ -580,6 +653,29 @@ export class SolidityBuildSystemImplementation {
580
653
  // and then trim just in case a blank space was left
581
654
  return `${error.type}: ${error.message}`.replace(/[:\s]*$/g, "").trim();
582
655
  }
656
+ async #getExpectedOutputLayout(rootFilePath, scope) {
657
+ const artifactsDirectory = await this.getArtifactsDirectory(scope);
658
+ const unified = !this.#options.solidityConfig.splitTestsCompilation;
659
+ // In unified mode, test roots under contracts scope don't emit type
660
+ // declarations. In split mode, the scope alone determines this.
661
+ let emitsTypeDeclarations;
662
+ if (scope === "contracts") {
663
+ if (unified) {
664
+ const parsed = parseRootPath(rootFilePath);
665
+ const isTestRoot = isNpmParsedRootPath(parsed)
666
+ ? false
667
+ : (await this.getScope(parsed.fsPath)) === "tests";
668
+ emitsTypeDeclarations = !isTestRoot;
669
+ }
670
+ else {
671
+ emitsTypeDeclarations = true;
672
+ }
673
+ }
674
+ else {
675
+ emitsTypeDeclarations = false;
676
+ }
677
+ return { artifactsDirectory, emitsTypeDeclarations };
678
+ }
583
679
  async #cacheCompilationResult(indexedIndividualJobs, result, emitArtifactsResult, isolated, scope) {
584
680
  for (const [userSourceName, root] of result.compilationJob.dependencyGraph
585
681
  .getRoots()
@@ -590,17 +686,19 @@ export class SolidityBuildSystemImplementation {
590
686
  const artifactPaths = emitArtifactsResult.artifactsPerFile.get(rootFilePath);
591
687
  assertHardhatInvariant(artifactPaths !== undefined, `No artifacts found on map for ${rootFilePath}`);
592
688
  const typeFilePath = emitArtifactsResult.typeFilePaths.get(rootFilePath);
593
- // Type declaration file is not generated for solidity tests
594
- assertHardhatInvariant(scope === "tests" || typeFilePath !== undefined, `No type file found on map for contract ${rootFilePath}`);
595
689
  const jobHash = await individualJob.getBuildId();
690
+ const expectedLayout = await this.#getExpectedOutputLayout(rootFilePath, scope);
596
691
  this.#compileCache[rootFilePath] = {
597
692
  jobHash,
598
693
  isolated,
694
+ compilerType: individualJob.solcConfig.type ?? "solc",
599
695
  artifactPaths,
600
696
  buildInfoPath: emitArtifactsResult.buildInfoPath,
601
697
  buildInfoOutputPath: emitArtifactsResult.buildInfoOutputPath,
602
698
  typeFilePath,
603
699
  wasm: result.compiler.isSolcJs,
700
+ artifactsDirectory: expectedLayout.artifactsDirectory,
701
+ emitsTypeDeclarations: expectedLayout.emitsTypeDeclarations,
604
702
  };
605
703
  }
606
704
  }
@@ -647,14 +745,18 @@ export class SolidityBuildSystemImplementation {
647
745
  return;
648
746
  }
649
747
  for (const job of runnableCompilationJobs) {
748
+ const compilerType = job.solcConfig.type ?? "solc";
650
749
  const solcVersion = job.solcConfig.version;
651
750
  const solcInput = await job.getSolcInput();
652
751
  const evmVersion = solcInput.settings.evmVersion ??
653
752
  `Check solc ${solcVersion}'s doc for its default evm version`;
654
- let jobsPerVersion = jobsPerVersionAndEvmVersion.get(solcVersion);
753
+ // Group by compiler type + Solidity version to produce separate log
754
+ // lines for e.g. "solc 0.8.33" vs "solx 0.1.3 (Solidity 0.8.33)".
755
+ const groupKey = `${compilerType}#${solcVersion}`;
756
+ let jobsPerVersion = jobsPerVersionAndEvmVersion.get(groupKey);
655
757
  if (jobsPerVersion === undefined) {
656
758
  jobsPerVersion = new Map();
657
- jobsPerVersionAndEvmVersion.set(solcVersion, jobsPerVersion);
759
+ jobsPerVersionAndEvmVersion.set(groupKey, jobsPerVersion);
658
760
  }
659
761
  let jobsPerEvmVersion = jobsPerVersion.get(evmVersion);
660
762
  if (jobsPerEvmVersion === undefined) {
@@ -663,19 +765,39 @@ export class SolidityBuildSystemImplementation {
663
765
  }
664
766
  jobsPerEvmVersion.push(job);
665
767
  }
666
- for (const solcVersion of [...jobsPerVersionAndEvmVersion.keys()].sort()) {
768
+ for (const groupKey of [...jobsPerVersionAndEvmVersion.keys()].sort()) {
667
769
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion --
668
770
  This is a valid key, just sorted */
669
- const jobsPerEvmVersion = jobsPerVersionAndEvmVersion.get(solcVersion);
771
+ const jobsPerEvmVersion = jobsPerVersionAndEvmVersion.get(groupKey);
772
+ const [compilerType, solidityVersion] = groupKey.split("#");
670
773
  for (const evmVersion of [...jobsPerEvmVersion.keys()].sort()) {
671
774
  /* eslint-disable-next-line @typescript-eslint/no-non-null-assertion --
672
775
  This is a valid key, just sorted */
673
776
  const jobs = jobsPerEvmVersion.get(evmVersion);
674
777
  const rootFiles = jobs.reduce((count, job) => count + job.dependencyGraph.getRoots().size, 0);
675
- console.log(chalk.bold(`Compiled ${rootFiles} Solidity ${pluralize(options.scope === "contracts" ? "file" : "test file", rootFiles)} with solc ${solcVersion}`), `(evm target: ${evmVersion})`);
778
+ // For solc, the compiler version is the Solidity version.
779
+ // For other compilers, extract the compiler's own version from the
780
+ // longVersion stored on the compilation job, and show the Solidity
781
+ // version separately.
782
+ let compilerLabel;
783
+ if (compilerType === "solc") {
784
+ compilerLabel = `solc ${solidityVersion}`;
785
+ }
786
+ else {
787
+ const longVersion = jobs[0].solcLongVersion;
788
+ const compilerVersion = longVersion.split("+")[0];
789
+ compilerLabel = `${compilerType} ${compilerVersion} (Solidity ${solidityVersion})`;
790
+ }
791
+ console.log(chalk.bold(`Compiled ${rootFiles} Solidity ${pluralize(options.scope === "contracts" ? "file" : "test file", rootFiles)} with ${compilerLabel}`), `(evm target: ${evmVersion})`);
676
792
  }
677
793
  }
678
794
  }
795
+ #ensureSplitCompilationModeIfTestsScope(scope = "contracts") {
796
+ if (scope === "tests" &&
797
+ !this.#options.solidityConfig.splitTestsCompilation) {
798
+ throw new HardhatError(HardhatError.ERRORS.CORE.SOLIDITY.SPLIT_TESTS_COMPILATION_DISABLED);
799
+ }
800
+ }
679
801
  }
680
802
  function toForwardSlash(str) {
681
803
  return str.split(/[\\\/]/).join(path.posix.sep);