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
@@ -41,6 +41,7 @@ const hardhatPlugin: HardhatPlugin = {
41
41
  hookHandlers: {
42
42
  config: () => import("./hook-handlers/config.js"),
43
43
  hre: () => import("./hook-handlers/hre.js"),
44
+ solidity: () => import("./hook-handlers/solidity.js"),
44
45
  },
45
46
  tasks: [
46
47
  {
@@ -0,0 +1,53 @@
1
+ import type { SolidityCompilerConfig } from "../../../types/config.js";
2
+ import type { Compiler } from "../../../types/solidity.js";
3
+
4
+ import { isSolcSolidityCompilerConfig } from "./build-system/build-system.js";
5
+ import {
6
+ downloadSolcCompilers,
7
+ getCompiler,
8
+ } from "./build-system/compiler/index.js";
9
+
10
+ /**
11
+ * Downloads solc compilers for the given configs, filtering out non-solc types.
12
+ * This is the default implementation of the `downloadCompilers` hook handler.
13
+ */
14
+ export async function downloadSolcCompilersHandler(
15
+ compilerConfigs: SolidityCompilerConfig[],
16
+ quiet: boolean,
17
+ ): Promise<void> {
18
+ const solcVersions = new Set(
19
+ compilerConfigs.filter(isSolcSolidityCompilerConfig).map((c) => c.version),
20
+ );
21
+
22
+ if (solcVersions.size > 0) {
23
+ await downloadSolcCompilers(solcVersions, quiet);
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Resolves the preferWasm setting for a given compiler config, falling back
29
+ * to the build profile's preferWasm if not set on the compiler.
30
+ */
31
+ export function resolvePreferWasm(
32
+ compilerConfig: SolidityCompilerConfig,
33
+ buildProfilePreferWasm: boolean,
34
+ ): boolean {
35
+ if (isSolcSolidityCompilerConfig(compilerConfig)) {
36
+ return compilerConfig.preferWasm ?? buildProfilePreferWasm;
37
+ }
38
+ return false;
39
+ }
40
+
41
+ /**
42
+ * Creates a solc Compiler for the given config. This is the default
43
+ * implementation used as the fallback in the `getCompiler` hook chain.
44
+ */
45
+ export async function getSolcCompilerForConfig(
46
+ compilerConfig: SolidityCompilerConfig,
47
+ buildProfilePreferWasm: boolean,
48
+ ): Promise<Compiler> {
49
+ return getCompiler(compilerConfig.version, {
50
+ preferWasm: resolvePreferWasm(compilerConfig, buildProfilePreferWasm),
51
+ compilerPath: compilerConfig.path,
52
+ });
53
+ }
@@ -1,8 +1,13 @@
1
- import type { HardhatRuntimeEnvironment } from "../../../../types/hre.js";
2
- import type { BuildScope } from "../../../../types/solidity.js";
1
+ import type {
2
+ BuildScope,
3
+ SolidityBuildSystem,
4
+ } from "../../../../types/solidity.js";
3
5
  import type { NewTaskActionFunction } from "../../../../types/tasks.js";
4
6
 
5
- import { HardhatError } from "@nomicfoundation/hardhat-errors";
7
+ import {
8
+ assertHardhatInvariant,
9
+ HardhatError,
10
+ } from "@nomicfoundation/hardhat-errors";
6
11
  import { resolveFromRoot } from "@nomicfoundation/hardhat-utils/path";
7
12
 
8
13
  import { throwIfSolidityBuildFailed } from "../build-results.js";
@@ -12,115 +17,395 @@ interface BuildActionArguments {
12
17
  force: boolean;
13
18
  files: string[];
14
19
  quiet: boolean;
15
- defaultBuildProfile: string | undefined;
20
+ defaultBuildProfile: string;
16
21
  noTests: boolean;
17
22
  noContracts: boolean;
18
23
  }
19
24
 
25
+ interface BuildActionResult {
26
+ contractRootPaths: string[];
27
+ testRootPaths: string[];
28
+ }
29
+
20
30
  const buildAction: NewTaskActionFunction<BuildActionArguments> = async (
21
31
  args: BuildActionArguments,
22
32
  hre,
23
- ) => {
24
- let contractRootPaths: string[] = [];
25
- let testRootPaths: string[] = [];
26
- const allUsedFiles: string[] = [];
27
-
28
- if (args.noContracts === false) {
29
- const { rootPaths, usedFiles } = await buildForScope(
30
- "contracts",
31
- args,
32
- hre,
33
+ ): Promise<BuildActionResult> => {
34
+ const buildProfile =
35
+ hre.globalOptions.buildProfile ?? args.defaultBuildProfile;
36
+
37
+ const files = normalizeRootPaths(args.files);
38
+
39
+ const partitionedFiles = await partitionRootPathsByScope(hre.solidity, files);
40
+
41
+ if (args.noContracts && partitionedFiles.contractRootPaths.length > 0) {
42
+ throw new HardhatError(
43
+ HardhatError.ERRORS.CORE.SOLIDITY.INCOMPATIBLE_FILES_WITH_BUILD_FLAGS,
44
+ {
45
+ files: partitionedFiles.contractRootPaths
46
+ .sort()
47
+ .map((f) => `- ${f}`)
48
+ .join("\n"),
49
+ },
33
50
  );
51
+ }
34
52
 
35
- contractRootPaths = rootPaths;
36
- allUsedFiles.push(...usedFiles);
53
+ if (args.noTests && partitionedFiles.testRootPaths.length > 0) {
54
+ throw new HardhatError(
55
+ HardhatError.ERRORS.CORE.SOLIDITY.INCOMPATIBLE_FILES_WITH_BUILD_FLAGS,
56
+ {
57
+ files: partitionedFiles.testRootPaths
58
+ .sort()
59
+ .map((f) => `- ${f}`)
60
+ .join("\n"),
61
+ },
62
+ );
37
63
  }
38
64
 
39
- if (args.noTests === false) {
40
- const { rootPaths, usedFiles } = await buildForScope("tests", args, hre);
65
+ if (hre.config.solidity.splitTestsCompilation) {
66
+ const contractRootPaths: string[] = [];
67
+ const testRootPaths: string[] = [];
41
68
 
42
- testRootPaths = rootPaths;
43
- allUsedFiles.push(...usedFiles);
44
- }
69
+ const shouldBuildContracts =
70
+ !args.noContracts &&
71
+ (files.length === 0 || partitionedFiles.contractRootPaths.length > 0);
45
72
 
46
- // If there's an unused file we fail
47
- if (args.files.length !== 0) {
48
- const files = new Set(args.files);
49
- const usedFiles = new Set(allUsedFiles);
50
- const unusedFiles = files.difference(usedFiles);
51
-
52
- if (unusedFiles.size > 0) {
53
- const list = [...unusedFiles]
54
- .sort()
55
- .map((f) => `- ${f}`)
56
- .join("\n");
57
-
58
- throw new HardhatError(
59
- HardhatError.ERRORS.CORE.SOLIDITY.UNRECOGNIZED_FILES_NOT_COMPILED,
60
- { files: list },
73
+ if (shouldBuildContracts) {
74
+ const contractBuildResults = await runSolidityBuild({
75
+ buildProfile,
76
+ files: partitionedFiles.contractRootPaths,
77
+ force: args.force,
78
+ isUnifiedModeOrScope: "contracts",
79
+ noContracts: args.noContracts,
80
+ noTests: args.noTests,
81
+ quiet: args.quiet,
82
+ solidity: hre.solidity,
83
+ });
84
+
85
+ assertHardhatInvariant(
86
+ contractBuildResults.testRootPaths.length === 0,
87
+ "The contracts scope should build no test in split test compilation mode",
61
88
  );
89
+
90
+ contractRootPaths.push(...contractBuildResults.contractRootPaths);
91
+ testRootPaths.push(...contractBuildResults.testRootPaths);
62
92
  }
93
+
94
+ const shouldBuildTests =
95
+ !args.noTests &&
96
+ (files.length === 0 || partitionedFiles.testRootPaths.length > 0);
97
+
98
+ if (shouldBuildTests) {
99
+ const testBuildResults = await runSolidityBuild({
100
+ buildProfile,
101
+ files: partitionedFiles.testRootPaths,
102
+ force: args.force,
103
+ isUnifiedModeOrScope: "tests",
104
+ noContracts: args.noContracts,
105
+ noTests: args.noTests,
106
+ quiet: args.quiet,
107
+ solidity: hre.solidity,
108
+ });
109
+
110
+ assertHardhatInvariant(
111
+ testBuildResults.contractRootPaths.length === 0,
112
+ "The tests scope should build no contract in split test compilation mode",
113
+ );
114
+
115
+ contractRootPaths.push(...testBuildResults.contractRootPaths);
116
+ testRootPaths.push(...testBuildResults.testRootPaths);
117
+ }
118
+
119
+ return { contractRootPaths, testRootPaths };
63
120
  }
64
121
 
65
- return { contractRootPaths, testRootPaths };
122
+ return runSolidityBuild({
123
+ buildProfile,
124
+ files,
125
+ force: args.force,
126
+ isUnifiedModeOrScope: true,
127
+ noContracts: args.noContracts,
128
+ noTests: args.noTests,
129
+ quiet: args.quiet,
130
+ solidity: hre.solidity,
131
+ });
66
132
  };
67
133
 
68
- async function buildForScope(
69
- scope: BuildScope,
70
- { force, files, quiet, defaultBuildProfile }: BuildActionArguments,
71
- { solidity, globalOptions }: HardhatRuntimeEnvironment,
72
- ) {
73
- const usedFiles = [];
134
+ /**
135
+ * Runs a solidity build for a scope/unified mode.
136
+ *
137
+ * Note: The files array should be pre-classified by scope if using split
138
+ * compilation. i.e. it should only include files of the scope being used.
139
+ */
140
+ async function runSolidityBuild({
141
+ buildProfile,
142
+ files,
143
+ force,
144
+ isUnifiedModeOrScope,
145
+ noContracts,
146
+ noTests,
147
+ quiet,
148
+ solidity,
149
+ }: {
150
+ buildProfile: string;
151
+ files: string[];
152
+ force: boolean;
153
+ isUnifiedModeOrScope: true | BuildScope;
154
+ noContracts: boolean;
155
+ noTests: boolean;
156
+ quiet: boolean;
157
+ solidity: SolidityBuildSystem;
158
+ }): Promise<{ contractRootPaths: string[]; testRootPaths: string[] }> {
159
+ const scope =
160
+ isUnifiedModeOrScope === true ? "contracts" : isUnifiedModeOrScope;
161
+
162
+ const { isFullBuild, contractRootPaths, testRootPaths } =
163
+ await getRootsToBuild({
164
+ solidity,
165
+ isUnifiedModeOrScope,
166
+ files,
167
+ noTests,
168
+ noContracts,
169
+ });
74
170
 
75
- // If no specific files are passed, it means a full compilation, i.e. all source files
76
- const isFullCompilation = files.length === 0;
171
+ // If there's nothing to build and this isn't a full build, we exit early.
172
+ // Full builds with no roots still need to run cleanup to remove stale
173
+ // artifacts.
174
+ if (
175
+ !isFullBuild &&
176
+ contractRootPaths.length === 0 &&
177
+ testRootPaths.length === 0
178
+ ) {
179
+ return { contractRootPaths, testRootPaths };
180
+ }
77
181
 
78
- const rootPaths = [];
182
+ const results = await solidity.build(
183
+ [...contractRootPaths, ...testRootPaths],
184
+ {
185
+ force,
186
+ buildProfile,
187
+ quiet,
188
+ scope,
189
+ },
190
+ );
191
+
192
+ throwIfSolidityBuildFailed(solidity, results);
79
193
 
80
- if (isFullCompilation) {
81
- rootPaths.push(...(await solidity.getRootFilePaths({ scope })));
194
+ // We use the result keys in case a hook added or removed root files
195
+ const builtRootPaths = [...results.keys()];
196
+
197
+ if (isFullBuild) {
198
+ await solidity.cleanupArtifacts(builtRootPaths, {
199
+ scope,
200
+ });
201
+ }
202
+
203
+ const preBuildRoots = new Set([...contractRootPaths, ...testRootPaths]);
204
+ if (
205
+ builtRootPaths.length === preBuildRoots.size &&
206
+ builtRootPaths.every((p) => preBuildRoots.has(p))
207
+ ) {
208
+ return { contractRootPaths, testRootPaths };
209
+ }
210
+
211
+ return partitionRootPathsByScope(solidity, builtRootPaths);
212
+ }
213
+
214
+ /**
215
+ * Returns the files to build, classified by testRootPaths and
216
+ * contractRootPaths, and a boolean indicating if this represents a full build
217
+ * for the scope/unified build.
218
+ *
219
+ * Note: The files array should be pre-classified by scope if using split
220
+ * compilation. i.e. it should only include files of the scope being used.
221
+ */
222
+ async function getRootsToBuild({
223
+ solidity,
224
+ isUnifiedModeOrScope,
225
+ files,
226
+ noTests,
227
+ noContracts,
228
+ }: {
229
+ solidity: SolidityBuildSystem;
230
+ isUnifiedModeOrScope: true | BuildScope;
231
+ files: string[];
232
+ noTests: boolean;
233
+ noContracts: boolean;
234
+ }): Promise<{
235
+ testRootPaths: string[];
236
+ contractRootPaths: string[];
237
+ isFullBuild: boolean;
238
+ }> {
239
+ if (isUnifiedModeOrScope === true) {
240
+ return getRootsToBuildInUnifiedMode({
241
+ files,
242
+ noContracts,
243
+ noTests,
244
+ solidity,
245
+ });
246
+ }
247
+
248
+ return getRootsToBuildForScope({
249
+ files,
250
+ scope: isUnifiedModeOrScope,
251
+ solidity,
252
+ });
253
+ }
254
+
255
+ /**
256
+ * Returns the root files to build in unified mode. While they are returned
257
+ * classified as contractRootPaths and testRootPaths, they are expected to be
258
+ * build together. It also returns a boolean indicating if this represents a
259
+ * full unified build.
260
+ *
261
+ * Note: The files array should be normalized already.
262
+ */
263
+ async function getRootsToBuildInUnifiedMode({
264
+ files,
265
+ noContracts,
266
+ noTests,
267
+ solidity,
268
+ }: {
269
+ files: string[];
270
+ noContracts: boolean;
271
+ noTests: boolean;
272
+ solidity: SolidityBuildSystem;
273
+ }): Promise<{
274
+ testRootPaths: string[];
275
+ contractRootPaths: string[];
276
+ isFullBuild: boolean;
277
+ }> {
278
+ const isFullBuild = files.length === 0 && !noTests && !noContracts;
279
+
280
+ let rootFilePaths: string[];
281
+
282
+ if (isFullBuild) {
283
+ // In this mode, "contracts" also returns the tests
284
+ rootFilePaths = await solidity.getRootFilePaths({
285
+ scope: "contracts",
286
+ });
82
287
  } else {
83
- for (const file of files) {
84
- if (isNpmRootPath(file)) {
85
- rootPaths.push(file);
288
+ const allRoots =
289
+ files.length > 0
290
+ ? files
291
+ : await solidity.getRootFilePaths({
292
+ scope: "contracts",
293
+ });
294
+
295
+ rootFilePaths = [];
296
+ for (const root of allRoots) {
297
+ if (isNpmRootPath(root)) {
298
+ // npm files are considered contract files, so we skip them if
299
+ // --no-contracts
300
+ if (!noContracts) {
301
+ rootFilePaths.push(root);
302
+ }
303
+
304
+ continue;
86
305
  }
87
306
 
88
- const rootPath = resolveFromRoot(process.cwd(), file);
307
+ const scope = await solidity.getScope(root);
89
308
 
90
- if ((await solidity.getScope(rootPath)) !== scope) {
309
+ if (noTests && scope === "tests") {
91
310
  continue;
92
311
  }
93
312
 
94
- usedFiles.push(file);
95
- rootPaths.push(rootPath);
96
- }
313
+ if (noContracts && scope === "contracts") {
314
+ continue;
315
+ }
97
316
 
98
- // If a file list has been passed but none match this scope, we don't run the build
99
- if (rootPaths.length === 0) {
100
- return { rootPaths, usedFiles };
317
+ rootFilePaths.push(root);
101
318
  }
102
319
  }
103
320
 
104
- const buildProfile = globalOptions.buildProfile ?? defaultBuildProfile;
321
+ const partitionedRootPaths = await partitionRootPathsByScope(
322
+ solidity,
323
+ rootFilePaths,
324
+ );
105
325
 
106
- const results = await solidity.build(rootPaths, {
107
- force,
108
- buildProfile,
109
- quiet,
110
- scope,
111
- });
326
+ return {
327
+ isFullBuild,
328
+ ...partitionedRootPaths,
329
+ };
330
+ }
112
331
 
113
- throwIfSolidityBuildFailed(solidity, results);
332
+ /**
333
+ * Returns the root files to build for a certain scope, and a boolean indicating
334
+ * if it's a full build for that scope.
335
+ *
336
+ * Note: The files array should be pre-classified by scope if using split
337
+ * compilation. i.e. it should only include files of the scope being used.
338
+ *
339
+ * Note: One of the returned arrays is always empty, depending on the scope
340
+ * being used.
341
+ */
342
+ async function getRootsToBuildForScope({
343
+ files,
344
+ scope,
345
+ solidity,
346
+ }: {
347
+ files: string[];
348
+ scope: BuildScope;
349
+ solidity: SolidityBuildSystem;
350
+ }): Promise<{
351
+ isFullBuild: boolean;
352
+ contractRootPaths: string[];
353
+ testRootPaths: string[];
354
+ }> {
355
+ const isFullBuild = files.length === 0;
356
+
357
+ const rootPaths = isFullBuild
358
+ ? await solidity.getRootFilePaths({ scope })
359
+ : files; // This is safe because the files have already been partitioned by scope
360
+
361
+ if (scope === "contracts") {
362
+ return { isFullBuild, contractRootPaths: rootPaths, testRootPaths: [] };
363
+ }
364
+
365
+ return { isFullBuild, contractRootPaths: [], testRootPaths: rootPaths };
366
+ }
367
+
368
+ /**
369
+ * Partitions root paths by scope, as returned by `solidity.getScope(rootPath)`.
370
+ */
371
+ async function partitionRootPathsByScope(
372
+ solidity: SolidityBuildSystem,
373
+ rootPaths: string[],
374
+ ): Promise<{ contractRootPaths: string[]; testRootPaths: string[] }> {
375
+ const contractRootPaths: string[] = [];
376
+ const testRootPaths: string[] = [];
114
377
 
115
- // If we recompiled the entire project we cleanup the artifacts
116
- if (isFullCompilation) {
117
- // Use the root files from the build results, which may include
118
- // additional files added by plugins hooking into solidity#build
119
- const builtRootPaths = [...results.keys()];
120
- await solidity.cleanupArtifacts(builtRootPaths, { scope });
378
+ for (const rootPath of rootPaths) {
379
+ if (isNpmRootPath(rootPath)) {
380
+ contractRootPaths.push(rootPath);
381
+ continue;
382
+ }
383
+
384
+ const scope = await solidity.getScope(rootPath);
385
+ if (scope === "tests") {
386
+ testRootPaths.push(rootPath);
387
+ } else {
388
+ contractRootPaths.push(rootPath);
389
+ }
121
390
  }
122
391
 
123
- return { rootPaths, usedFiles };
392
+ return { contractRootPaths, testRootPaths };
393
+ }
394
+
395
+ /**
396
+ * Normalizes the received root paths.
397
+ *
398
+ * If a file is an npm root path or absolute file path, it's returned as is.
399
+ * If it's a relative path it's resolved from the CWD.
400
+ */
401
+ function normalizeRootPaths(files: string[]): string[] {
402
+ return files.map((f) => {
403
+ if (isNpmRootPath(f)) {
404
+ return f;
405
+ }
406
+
407
+ return resolveFromRoot(process.cwd(), f);
408
+ });
124
409
  }
125
410
 
126
411
  export default buildAction;