hardhat 3.4.1 → 3.4.2

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 (119) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/src/cli.js +5 -5
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.d.ts.map +1 -1
  5. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js +10 -3
  6. package/dist/src/internal/builtin-plugins/artifacts/artifact-manager.js.map +1 -1
  7. package/dist/src/internal/builtin-plugins/coverage/exports.d.ts +1 -1
  8. package/dist/src/internal/builtin-plugins/coverage/exports.d.ts.map +1 -1
  9. package/dist/src/internal/builtin-plugins/coverage/exports.js +1 -1
  10. package/dist/src/internal/builtin-plugins/coverage/exports.js.map +1 -1
  11. package/dist/src/internal/builtin-plugins/coverage/helpers/accessors.d.ts +7 -0
  12. package/dist/src/internal/builtin-plugins/coverage/helpers/accessors.d.ts.map +1 -0
  13. package/dist/src/internal/builtin-plugins/coverage/helpers/accessors.js +24 -0
  14. package/dist/src/internal/builtin-plugins/coverage/helpers/accessors.js.map +1 -0
  15. package/dist/src/internal/builtin-plugins/coverage/helpers/compat.d.ts +4 -0
  16. package/dist/src/internal/builtin-plugins/coverage/helpers/compat.d.ts.map +1 -0
  17. package/dist/src/internal/builtin-plugins/coverage/helpers/compat.js +27 -0
  18. package/dist/src/internal/builtin-plugins/coverage/helpers/compat.js.map +1 -0
  19. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/clean.js +1 -1
  20. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/clean.js.map +1 -1
  21. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/hre.d.ts.map +1 -1
  22. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/hre.js +18 -15
  23. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/hre.js.map +1 -1
  24. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/solidity.js +1 -1
  25. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/solidity.js.map +1 -1
  26. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/test.js +1 -1
  27. package/dist/src/internal/builtin-plugins/coverage/hook-handlers/test.js.map +1 -1
  28. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.d.ts.map +1 -1
  29. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js +10 -4
  30. package/dist/src/internal/builtin-plugins/gas-analytics/helpers/accessors.js.map +1 -1
  31. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.d.ts.map +1 -1
  32. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js +18 -14
  33. package/dist/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.js.map +1 -1
  34. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.d.ts.map +1 -1
  35. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js +2 -7
  36. package/dist/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.js.map +1 -1
  37. package/dist/src/internal/builtin-plugins/network-manager/config-resolution.js +1 -1
  38. package/dist/src/internal/builtin-plugins/network-manager/config-resolution.js.map +1 -1
  39. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-constants.d.ts +14 -0
  40. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-constants.d.ts.map +1 -0
  41. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-constants.js +40 -0
  42. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-constants.js.map +1 -0
  43. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts +1 -12
  44. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.d.ts.map +1 -1
  45. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js +0 -39
  46. package/dist/src/internal/builtin-plugins/network-manager/edr/edr-provider.js.map +1 -1
  47. package/dist/src/internal/builtin-plugins/network-manager/edr/types/hardfork.d.ts.map +1 -1
  48. package/dist/src/internal/builtin-plugins/network-manager/edr/types/hardfork.js +2 -5
  49. package/dist/src/internal/builtin-plugins/network-manager/edr/types/hardfork.js.map +1 -1
  50. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js +1 -1
  51. package/dist/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.js.map +1 -1
  52. package/dist/src/internal/builtin-plugins/node/helpers.js +1 -1
  53. package/dist/src/internal/builtin-plugins/node/helpers.js.map +1 -1
  54. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.d.ts.map +1 -1
  55. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js +50 -20
  56. package/dist/src/internal/builtin-plugins/solidity/build-system/build-system.js.map +1 -1
  57. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.d.ts.map +1 -1
  58. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.js +6 -1
  59. package/dist/src/internal/builtin-plugins/solidity/hook-handlers/hre.js.map +1 -1
  60. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js +1 -1
  61. package/dist/src/internal/builtin-plugins/solidity-test/task-action.js.map +1 -1
  62. package/dist/src/internal/builtin-plugins/test/task-action.js +1 -1
  63. package/dist/src/internal/builtin-plugins/test/task-action.js.map +1 -1
  64. package/dist/src/internal/cli/init/init.d.ts.map +1 -1
  65. package/dist/src/internal/cli/init/init.js +17 -8
  66. package/dist/src/internal/cli/init/init.js.map +1 -1
  67. package/dist/src/internal/cli/init/template.d.ts.map +1 -1
  68. package/dist/src/internal/cli/init/template.js +5 -14
  69. package/dist/src/internal/cli/init/template.js.map +1 -1
  70. package/dist/src/internal/cli/node-version.d.ts +1 -1
  71. package/dist/src/internal/cli/node-version.d.ts.map +1 -1
  72. package/dist/src/internal/cli/node-version.js +16 -9
  73. package/dist/src/internal/cli/node-version.js.map +1 -1
  74. package/dist/src/internal/core/hook-manager.d.ts.map +1 -1
  75. package/dist/src/internal/core/hook-manager.js +194 -57
  76. package/dist/src/internal/core/hook-manager.js.map +1 -1
  77. package/dist/src/internal/core/hre.js +2 -2
  78. package/dist/src/internal/core/hre.js.map +1 -1
  79. package/dist/src/internal/core/lazy-user-interruptions.d.ts +11 -0
  80. package/dist/src/internal/core/lazy-user-interruptions.d.ts.map +1 -0
  81. package/dist/src/internal/core/lazy-user-interruptions.js +39 -0
  82. package/dist/src/internal/core/lazy-user-interruptions.js.map +1 -0
  83. package/package.json +2 -2
  84. package/src/cli.ts +5 -5
  85. package/src/internal/builtin-plugins/artifacts/artifact-manager.ts +12 -5
  86. package/src/internal/builtin-plugins/coverage/exports.ts +1 -1
  87. package/src/internal/builtin-plugins/coverage/helpers/accessors.ts +44 -0
  88. package/src/internal/builtin-plugins/coverage/helpers/compat.ts +37 -0
  89. package/src/internal/builtin-plugins/coverage/hook-handlers/clean.ts +1 -1
  90. package/src/internal/builtin-plugins/coverage/hook-handlers/hre.ts +26 -16
  91. package/src/internal/builtin-plugins/coverage/hook-handlers/solidity.ts +1 -1
  92. package/src/internal/builtin-plugins/coverage/hook-handlers/test.ts +1 -1
  93. package/src/internal/builtin-plugins/gas-analytics/helpers/accessors.ts +12 -5
  94. package/src/internal/builtin-plugins/gas-analytics/hook-handlers/hre.ts +29 -17
  95. package/src/internal/builtin-plugins/gas-analytics/snapshot-cheatcodes.ts +2 -6
  96. package/src/internal/builtin-plugins/network-manager/config-resolution.ts +1 -1
  97. package/src/internal/builtin-plugins/network-manager/edr/edr-constants.ts +61 -0
  98. package/src/internal/builtin-plugins/network-manager/edr/edr-provider.ts +0 -59
  99. package/src/internal/builtin-plugins/network-manager/edr/types/hardfork.ts +3 -9
  100. package/src/internal/builtin-plugins/network-manager/edr/utils/convert-to-edr.ts +1 -1
  101. package/src/internal/builtin-plugins/node/helpers.ts +1 -1
  102. package/src/internal/builtin-plugins/solidity/build-system/build-system.ts +69 -43
  103. package/src/internal/builtin-plugins/solidity/hook-handlers/hre.ts +13 -4
  104. package/src/internal/builtin-plugins/solidity-test/task-action.ts +1 -1
  105. package/src/internal/builtin-plugins/test/task-action.ts +1 -1
  106. package/src/internal/cli/init/init.ts +31 -13
  107. package/src/internal/cli/init/template.ts +22 -27
  108. package/src/internal/cli/node-version.ts +19 -11
  109. package/src/internal/core/hook-manager.ts +265 -101
  110. package/src/internal/core/hre.ts +2 -2
  111. package/src/internal/core/lazy-user-interruptions.ts +75 -0
  112. package/templates/hardhat-3/01-node-test-runner-viem/package.json +2 -2
  113. package/templates/hardhat-3/02-mocha-ethers/package.json +2 -2
  114. package/templates/hardhat-3/03-minimal/package.json +1 -1
  115. package/dist/src/internal/builtin-plugins/coverage/helpers.d.ts +0 -15
  116. package/dist/src/internal/builtin-plugins/coverage/helpers.d.ts.map +0 -1
  117. package/dist/src/internal/builtin-plugins/coverage/helpers.js +0 -35
  118. package/dist/src/internal/builtin-plugins/coverage/helpers.js.map +0 -1
  119. package/src/internal/builtin-plugins/coverage/helpers.ts +0 -63
@@ -5,25 +5,71 @@ import { detectPluginNpmDependencyProblems } from "./plugins/detect-plugin-npm-d
5
5
  export class HookManagerImplementation {
6
6
  #mutex = new AsyncMutex();
7
7
  #projectRoot;
8
- #pluginsInReverseOrder;
9
8
  /**
9
+ * The context passed to hook handlers, except to the `config` ones, to break
10
+ * a circular dependency between the config and the hook handler.
11
+ *
10
12
  * Initially `undefined` to be able to run the config hooks during
11
13
  * initialization.
12
14
  */
13
15
  #context;
14
16
  /**
15
- * The initialized handler categories for each plugin.
17
+ * Plugins that provide hook handlers for each category, in reverse order.
18
+ *
19
+ * Precomputed from the plugin list at construction.
20
+ */
21
+ #pluginsByHookCategory = new Map();
22
+ /**
23
+ * Cached resolved category objects per hook category in reverse plugin
24
+ * order.
25
+ *
26
+ * Only written by #getStaticHookHandlerCategories, which uses a mutex to
27
+ * ensure that every Hook Category Factory is run once per HookManager
28
+ * instance.
16
29
  */
17
- #staticHookHandlerCategories = new Map();
30
+ #resolvedStaticCategories = new Map();
18
31
  /**
19
32
  * A map of the dynamically registered handler categories.
20
33
  *
21
34
  * Each array is a list of categories, in reverse order of registration.
35
+ *
36
+ * Written by registerHandlers and unregisterHandlers.
22
37
  */
23
38
  #dynamicHookHandlerCategories = new Map();
39
+ /**
40
+ * Cached combined (dynamic + static) handlers per (category, hook name) in
41
+ * chained running order.
42
+ *
43
+ * Only written by #getHandlersInChainedRunningOrder, and invalidated
44
+ * per-category on dynamic handlers register/unregister.
45
+ */
46
+ #chainedHandlers = new Map();
47
+ /**
48
+ * Cached combined handlers per (category, hook name) in sequential running
49
+ * order (reverse of chained).
50
+ *
51
+ * Only written by #getHandlersInSequentialRunningOrder, and invalidated
52
+ * per-category on dynamic handlers register/unregister.
53
+ */
54
+ #sequentialHandlers = new Map();
24
55
  constructor(projectRoot, plugins) {
25
56
  this.#projectRoot = projectRoot;
26
- this.#pluginsInReverseOrder = plugins.toReversed();
57
+ for (const plugin of plugins.toReversed()) {
58
+ if (plugin.hookHandlers === undefined) {
59
+ continue;
60
+ }
61
+ for (const hookCategoryName of Object.keys(plugin.hookHandlers)) {
62
+ if (plugin.hookHandlers[hookCategoryName] === undefined) {
63
+ continue;
64
+ }
65
+ let pluginsForCategory = this.#pluginsByHookCategory.get(hookCategoryName);
66
+ if (pluginsForCategory === undefined) {
67
+ pluginsForCategory = [];
68
+ this.#pluginsByHookCategory.set(hookCategoryName, pluginsForCategory);
69
+ }
70
+ pluginsForCategory.push(plugin);
71
+ }
72
+ }
27
73
  }
28
74
  setContext(context) {
29
75
  this.#context = context;
@@ -35,6 +81,7 @@ export class HookManagerImplementation {
35
81
  this.#dynamicHookHandlerCategories.set(hookCategoryName, categories);
36
82
  }
37
83
  categories.unshift(hookHandlerCategory);
84
+ this.#invalidateResolvedHandlersCache(hookCategoryName);
38
85
  }
39
86
  unregisterHandlers(hookCategoryName, hookHandlerCategory) {
40
87
  const categories = this.#dynamicHookHandlerCategories.get(hookCategoryName);
@@ -42,9 +89,21 @@ export class HookManagerImplementation {
42
89
  return;
43
90
  }
44
91
  this.#dynamicHookHandlerCategories.set(hookCategoryName, categories.filter((c) => c !== hookHandlerCategory));
92
+ this.#invalidateResolvedHandlersCache(hookCategoryName);
45
93
  }
46
94
  async runHandlerChain(hookCategoryName, hookName, params, defaultImplementation) {
47
- const handlers = await this.#getHandlersInChainedRunningOrder(hookCategoryName, hookName);
95
+ // Synchronous fast path for already cached handlers. This duplicates
96
+ // the check inside #getHandlersInChainedRunningOrder on purpose:
97
+ // calling that async method introduces a microtask tick even on a
98
+ // cache hit, whereas a direct Map lookup stays on the current tick.
99
+ // That tick matters here because runHandlerChain is on every hook's
100
+ // hot path, and this path pairs with the empty-handlers shortcut
101
+ // below to dispatch straight to defaultImplementation with no awaits.
102
+ const cachedHandlers = this.#chainedHandlers
103
+ .get(hookCategoryName)
104
+ ?.get(hookName);
105
+ const handlers = cachedHandlers ??
106
+ (await this.#getHandlersInChainedRunningOrder(hookCategoryName, hookName));
48
107
  let handlerParams;
49
108
  if (hookCategoryName !== "config") {
50
109
  assertHardhatInvariant(this.#context !== undefined, "Context must be set before running non-config hooks");
@@ -53,6 +112,12 @@ export class HookManagerImplementation {
53
112
  else {
54
113
  handlerParams = params;
55
114
  }
115
+ // Fast path for the common case of no registered handlers: skip building
116
+ // handlerParams and the `next` closure, and call the default implementation
117
+ // directly.
118
+ if (handlers.length === 0) {
119
+ return (await defaultImplementation(...handlerParams));
120
+ }
56
121
  const numberOfHandlers = handlers.length;
57
122
  let index = 0;
58
123
  const next = async (...nextParams) => {
@@ -98,65 +163,137 @@ export class HookManagerImplementation {
98
163
  return handlers.length > 0;
99
164
  }
100
165
  async #getHandlersInChainedRunningOrder(hookCategoryName, hookName) {
101
- const pluginHooks = await this.#getPluginHooks(hookCategoryName, hookName);
102
- const dynamicHooks = await this.#getDynamicHooks(hookCategoryName, hookName);
103
- return [...dynamicHooks, ...pluginHooks];
166
+ let handlersByName = this.#chainedHandlers.get(hookCategoryName);
167
+ if (handlersByName === undefined) {
168
+ handlersByName = new Map();
169
+ this.#chainedHandlers.set(hookCategoryName, handlersByName);
170
+ }
171
+ const cached = handlersByName.get(hookName);
172
+ if (cached !== undefined) {
173
+ return cached;
174
+ }
175
+ const staticCategories = await this.#getStaticHookHandlerCategories(hookCategoryName);
176
+ // IMPORTANT NOTE: Accessing the dynamic hook handlers MUST happen
177
+ // after awaiting the static ones. See
178
+ // #invalidateResolvedHandlersCache for more info.
179
+ const dynamicCategories = this.#dynamicHookHandlerCategories.get(hookCategoryName);
180
+ const handlers = [];
181
+ if (dynamicCategories !== undefined) {
182
+ for (const category of dynamicCategories) {
183
+ const handler = category[hookName];
184
+ if (handler !== undefined) {
185
+ handlers.push(handler);
186
+ }
187
+ }
188
+ }
189
+ for (const category of staticCategories) {
190
+ const handler = category[hookName];
191
+ if (handler !== undefined) {
192
+ handlers.push(handler);
193
+ }
194
+ }
195
+ handlersByName.set(hookName, handlers);
196
+ return handlers;
104
197
  }
105
198
  async #getHandlersInSequentialRunningOrder(hookCategoryName, hookName) {
106
- const handlersInChainedOrder = await this.#getHandlersInChainedRunningOrder(hookCategoryName, hookName);
107
- return handlersInChainedOrder.reverse();
199
+ let handlersByName = this.#sequentialHandlers.get(hookCategoryName);
200
+ if (handlersByName === undefined) {
201
+ handlersByName = new Map();
202
+ this.#sequentialHandlers.set(hookCategoryName, handlersByName);
203
+ }
204
+ const cached = handlersByName.get(hookName);
205
+ if (cached !== undefined) {
206
+ return cached;
207
+ }
208
+ const chained = await this.#getHandlersInChainedRunningOrder(hookCategoryName, hookName);
209
+ const sequential = chained.toReversed();
210
+ handlersByName.set(hookName, sequential);
211
+ return sequential;
108
212
  }
109
- async #getDynamicHooks(hookCategoryName, hookName) {
110
- const categories = this.#dynamicHookHandlerCategories.get(hookCategoryName);
111
- if (categories === undefined) {
213
+ async #getStaticHookHandlerCategories(hookCategoryName) {
214
+ const cached = this.#resolvedStaticCategories.get(hookCategoryName);
215
+ if (cached !== undefined) {
216
+ return cached;
217
+ }
218
+ const plugins = this.#pluginsByHookCategory.get(hookCategoryName);
219
+ // We don't need to get the mutex to resolve this case, as it will always
220
+ // be an empty array, and won't execute any factory.
221
+ if (plugins === undefined) {
222
+ this.#resolvedStaticCategories.set(hookCategoryName, []);
112
223
  return [];
113
224
  }
114
- return categories.flatMap((hookCategory) => {
115
- return (hookCategory[hookName] ?? []);
116
- });
117
- }
118
- async #getPluginHooks(hookCategoryName, hookName) {
119
- const categories = await this.#mutex.exclusiveRun(async () => {
120
- return await Promise.all(this.#pluginsInReverseOrder.map(async (plugin) => {
121
- const existingCategory = this.#staticHookHandlerCategories
122
- .get(plugin.id)
123
- ?.get(hookCategoryName);
124
- if (existingCategory !== undefined) {
125
- return existingCategory;
126
- }
127
- const hookHandlerCategoryFactory = plugin.hookHandlers?.[hookCategoryName];
128
- if (hookHandlerCategoryFactory === undefined) {
129
- return;
130
- }
131
- let factory;
132
- try {
133
- factory = (await hookHandlerCategoryFactory()).default;
134
- }
135
- catch (error) {
136
- ensureError(error);
137
- await detectPluginNpmDependencyProblems(this.#projectRoot, plugin, error);
138
- throw error;
139
- }
140
- assertHardhatInvariant(typeof factory === "function", `Plugin ${plugin.id} doesn't export a hook factory for category ${hookCategoryName}`);
141
- const hookCategory = await factory();
142
- assertHardhatInvariant(hookCategory !== null && typeof hookCategory === "object", `Plugin ${plugin.id} doesn't export a valid factory for category ${hookCategoryName}, it didn't return an object`);
143
- if (!this.#staticHookHandlerCategories.has(plugin.id)) {
144
- this.#staticHookHandlerCategories.set(plugin.id, new Map());
145
- }
146
- // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- Defined right above
147
- this.#staticHookHandlerCategories
148
- .get(plugin.id)
149
- .set(hookCategoryName, hookCategory);
150
- return hookCategory;
151
- }));
152
- });
153
- return categories.flatMap((category) => {
154
- const handler = category?.[hookName];
155
- if (handler === undefined) {
156
- return [];
225
+ return await this.#mutex.exclusiveRun(async () => {
226
+ // Re-check under the mutex in case another caller just populated it.
227
+ const recheck = this.#resolvedStaticCategories.get(hookCategoryName);
228
+ if (recheck !== undefined) {
229
+ return recheck;
157
230
  }
158
- return handler;
231
+ const resolved = await Promise.all(plugins.map(async (plugin) => await this.#getPluginStaticHookCategory(plugin, hookCategoryName)));
232
+ this.#resolvedStaticCategories.set(hookCategoryName, resolved);
233
+ return resolved;
159
234
  });
160
235
  }
236
+ /**
237
+ * Returns the hook category object for a plugin that has the hook category
238
+ * defined.
239
+ *
240
+ * @param plugin A plugin that MUST have the given hook category defined.
241
+ * @param hookCategoryName The name of the hook category.
242
+ * @returns The hook category object.
243
+ */
244
+ async #getPluginStaticHookCategory(plugin, hookCategoryName) {
245
+ const hookHandlerCategoryFactory = plugin.hookHandlers?.[hookCategoryName];
246
+ assertHardhatInvariant(hookHandlerCategoryFactory !== undefined, "#pluginsByHookCategory only contains plugins with this hook category");
247
+ let factory;
248
+ try {
249
+ factory = (await hookHandlerCategoryFactory()).default;
250
+ }
251
+ catch (error) {
252
+ ensureError(error);
253
+ await detectPluginNpmDependencyProblems(this.#projectRoot, plugin, error);
254
+ throw error;
255
+ }
256
+ assertHardhatInvariant(typeof factory === "function", `Plugin ${plugin.id} doesn't export a hook factory for category ${hookCategoryName}`);
257
+ const hookCategory = await factory();
258
+ assertHardhatInvariant(hookCategory !== null && typeof hookCategory === "object", `Plugin ${plugin.id} doesn't export a valid factory for category ${hookCategoryName}, it didn't return an object`);
259
+ return hookCategory;
260
+ }
261
+ #invalidateResolvedHandlersCache(hookCategoryName) {
262
+ // Invalidation deletes the outer entry rather than clearing the inner
263
+ // map. This matters under concurrency.
264
+ //
265
+ // A reader of #getHandlersInChainedRunningOrder (or its sequential
266
+ // sibling) captures a reference to the inner map before awaiting the
267
+ // static categories, and writes its computed array back after the
268
+ // await. If invalidation runs during that await, deleting the outer
269
+ // entry leaves the reader's inner map orphaned: its write lands in a
270
+ // map no longer reachable from #chainedHandlers/#sequentialHandlers,
271
+ // so it cannot poison the shared cache. The next reader sees
272
+ // `undefined`, installs a fresh inner map, and rebuilds from the
273
+ // current dynamic state.
274
+ //
275
+ // Two distinct properties make this safe, guaranteed by two different
276
+ // things:
277
+ //
278
+ // 1. The in-flight reader's own return value is correct. This is
279
+ // because #getHandlersInChainedRunningOrder reads
280
+ // #dynamicHookHandlerCategories *after* awaiting the static
281
+ // categories. Any invalidation that happened during the await is
282
+ // visible to the reader when it resumes, so the array it builds
283
+ // reflects the current dynamic state.
284
+ //
285
+ // 2. The shared cache never holds a stale array. This is guaranteed
286
+ // by the orphaning-by-delete described above: a reader that
287
+ // started before the invalidation can only write into an
288
+ // unreachable inner map.
289
+ //
290
+ // Property 1 depends on the ordering of the dynamic handlers read relative
291
+ // to the await. If that read ever moved *before* the await, a reader
292
+ // could build a stale array and return it to its caller — the cache
293
+ // would still be protected by property 2, but the reader's caller
294
+ // would see the stale result.
295
+ this.#chainedHandlers.delete(hookCategoryName);
296
+ this.#sequentialHandlers.delete(hookCategoryName);
297
+ }
161
298
  }
162
299
  //# sourceMappingURL=hook-manager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"hook-manager.js","sourceRoot":"","sources":["../../../../src/internal/core/hook-manager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-manager.js","sourceRoot":"","sources":["../../../../src/internal/core/hook-manager.ts"],"names":[],"mappings":"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"}
@@ -6,9 +6,9 @@ import { validateUserConfig } from "./config-validation.js";
6
6
  import { resolveConfigurationVariable } from "./configuration-variables.js";
7
7
  import { buildGlobalOptionDefinitions, resolveGlobalOptions, } from "./global-options.js";
8
8
  import { HookManagerImplementation } from "./hook-manager.js";
9
+ import { LazyUserInterruptionManager } from "./lazy-user-interruptions.js";
9
10
  import { resolvePluginList } from "./plugins/resolve-plugin-list.js";
10
11
  import { TaskManagerImplementation } from "./tasks/task-manager.js";
11
- import { UserInterruptionManagerImplementation } from "./user-interruptions.js";
12
12
  export class HardhatRuntimeEnvironmentImplementation {
13
13
  userConfig;
14
14
  config;
@@ -63,7 +63,7 @@ export class HardhatRuntimeEnvironmentImplementation {
63
63
  const globalOptions = resolveGlobalOptions(userProvidedGlobalOptions, globalOptionDefinitions);
64
64
  // Set the HookContext in the hook manager so that non-config hooks can
65
65
  // use it
66
- const interruptions = new UserInterruptionManagerImplementation(hooks);
66
+ const interruptions = new LazyUserInterruptionManager(hooks);
67
67
  const hre = new HardhatRuntimeEnvironmentImplementation(extendedUserConfig, config, hooks, interruptions, globalOptions, versions, globalOptionDefinitions);
68
68
  // We create an object with the HRE as its prototype, and overwrite the
69
69
  // tasks property with undefined, so that hooks don't have access to the
@@ -1 +1 @@
1
- {"version":3,"file":"hre.js","sourceRoot":"","sources":["../../../../src/internal/core/hre.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hre.js","sourceRoot":"","sources":["../../../../src/internal/core/hre.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { HookManager } from "../../types/hooks.js";
2
+ import type { UserInterruptionManager } from "../../types/user-interruptions.js";
3
+ export declare class LazyUserInterruptionManager implements UserInterruptionManager {
4
+ #private;
5
+ constructor(hooks: HookManager);
6
+ displayMessage(interruptor: string, message: string): Promise<void>;
7
+ requestInput(interruptor: string, inputDescription: string): Promise<string>;
8
+ requestSecretInput(interruptor: string, inputDescription: string): Promise<string>;
9
+ uninterrupted<ReturnT>(f: () => ReturnT): Promise<Awaited<ReturnT>>;
10
+ }
11
+ //# sourceMappingURL=lazy-user-interruptions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-user-interruptions.d.ts","sourceRoot":"","sources":["../../../../src/internal/core/lazy-user-interruptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAMjF,qBAAa,2BAA4B,YAAW,uBAAuB;;gBAK7D,KAAK,EAAE,WAAW;IAIjB,cAAc,CACzB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAKH,YAAY,CACvB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC;IAQL,kBAAkB,CAC7B,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,GACvB,OAAO,CAAC,MAAM,CAAC;IAQL,aAAa,CAAC,OAAO,EAChC,CAAC,EAAE,MAAM,OAAO,GACf,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;CAyB7B"}
@@ -0,0 +1,39 @@
1
+ let UserInterruptionManagerImplementation;
2
+ export class LazyUserInterruptionManager {
3
+ #hooks;
4
+ #userInterruptionManager;
5
+ constructor(hooks) {
6
+ this.#hooks = hooks;
7
+ }
8
+ async displayMessage(interruptor, message) {
9
+ const userInterruptionManager = await this.#getUserInterruptionManager();
10
+ return await userInterruptionManager.displayMessage(interruptor, message);
11
+ }
12
+ async requestInput(interruptor, inputDescription) {
13
+ const userInterruptionManager = await this.#getUserInterruptionManager();
14
+ return await userInterruptionManager.requestInput(interruptor, inputDescription);
15
+ }
16
+ async requestSecretInput(interruptor, inputDescription) {
17
+ const userInterruptionManager = await this.#getUserInterruptionManager();
18
+ return await userInterruptionManager.requestSecretInput(interruptor, inputDescription);
19
+ }
20
+ async uninterrupted(f) {
21
+ const userInterruptionManager = await this.#getUserInterruptionManager();
22
+ return await userInterruptionManager.uninterrupted(f);
23
+ }
24
+ async #getUserInterruptionManager() {
25
+ // Note: `await import` must run BEFORE the instance cache check so that
26
+ // concurrent callers share a single microtask-dedupe point — otherwise
27
+ // each suspended caller re-enters the branch and constructs its own
28
+ // impl, so callers end up holding different impl instances and state,
29
+ // which can cause concurrency issues.
30
+ if (UserInterruptionManagerImplementation === undefined) {
31
+ ({ UserInterruptionManagerImplementation } = await import("./user-interruptions.js"));
32
+ }
33
+ if (this.#userInterruptionManager === undefined) {
34
+ this.#userInterruptionManager = new UserInterruptionManagerImplementation(this.#hooks);
35
+ }
36
+ return this.#userInterruptionManager;
37
+ }
38
+ }
39
+ //# sourceMappingURL=lazy-user-interruptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lazy-user-interruptions.js","sourceRoot":"","sources":["../../../../src/internal/core/lazy-user-interruptions.ts"],"names":[],"mappings":"AAIA,IAAI,qCAES,CAAC;AAEd,MAAM,OAAO,2BAA2B;IAC7B,MAAM,CAAc;IAE7B,wBAAwB,CAAqD;IAE7E,YAAY,KAAkB;QAC5B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACtB,CAAC;IAEM,KAAK,CAAC,cAAc,CACzB,WAAmB,EACnB,OAAe;QAEf,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACzE,OAAO,MAAM,uBAAuB,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC5E,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,WAAmB,EACnB,gBAAwB;QAExB,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACzE,OAAO,MAAM,uBAAuB,CAAC,YAAY,CAC/C,WAAW,EACX,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,kBAAkB,CAC7B,WAAmB,EACnB,gBAAwB;QAExB,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACzE,OAAO,MAAM,uBAAuB,CAAC,kBAAkB,CACrD,WAAW,EACX,gBAAgB,CACjB,CAAC;IACJ,CAAC;IAEM,KAAK,CAAC,aAAa,CACxB,CAAgB;QAEhB,MAAM,uBAAuB,GAAG,MAAM,IAAI,CAAC,2BAA2B,EAAE,CAAC;QACzE,OAAO,MAAM,uBAAuB,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,KAAK,CAAC,2BAA2B;QAC/B,wEAAwE;QACxE,uEAAuE;QACvE,oEAAoE;QACpE,sEAAsE;QACtE,sCAAsC;QACtC,IAAI,qCAAqC,KAAK,SAAS,EAAE,CAAC;YACxD,CAAC,EAAE,qCAAqC,EAAE,GAAG,MAAM,MAAM,CACvD,yBAAyB,CAC1B,CAAC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,wBAAwB,KAAK,SAAS,EAAE,CAAC;YAChD,IAAI,CAAC,wBAAwB,GAAG,IAAI,qCAAqC,CACvE,IAAI,CAAC,MAAM,CACZ,CAAC;QACJ,CAAC;QAED,OAAO,IAAI,CAAC,wBAAwB,CAAC;IACvC,CAAC;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hardhat",
3
- "version": "3.4.1",
3
+ "version": "3.4.2",
4
4
  "description": "Hardhat is an extensible developer tool that helps smart contract developers increase productivity by reliably bringing together the tools they want.",
5
5
  "homepage": "https://hardhat.org",
6
6
  "repository": {
@@ -79,7 +79,7 @@
79
79
  "dependencies": {
80
80
  "@nomicfoundation/edr": "0.12.0-next.29",
81
81
  "@nomicfoundation/hardhat-errors": "^3.0.11",
82
- "@nomicfoundation/hardhat-utils": "^4.0.4",
82
+ "@nomicfoundation/hardhat-utils": "^4.0.5",
83
83
  "@nomicfoundation/hardhat-vendored": "^3.0.2",
84
84
  "@nomicfoundation/hardhat-zod-utils": "^3.0.4",
85
85
  "@nomicfoundation/solidity-analyzer": "^0.1.1",
package/src/cli.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { printNodeJsVersionWarningIfNecessary } from "./internal/cli/node-version.js";
3
+ import { exitIfNodeVersionNotSupported } from "./internal/cli/node-version.js";
4
4
 
5
5
  // We enable the sourcemaps before loading main, so that everything except this
6
6
  // small file is loaded with sourcemaps enabled.
7
7
  process.setSourceMapsEnabled(true);
8
8
 
9
- // We also print this warning before loading main, so that if there is some
10
- // unsupported js syntax or Node API elsewhere, we get to print it before
11
- // crashing.
12
- printNodeJsVersionWarningIfNecessary();
9
+ // We check the Node.js version before loading main, so that if there is some
10
+ // unsupported js syntax or Node API elsewhere, we get to exit with a clear
11
+ // error before crashing.
12
+ exitIfNodeVersionNotSupported();
13
13
 
14
14
  // eslint-disable-next-line no-restricted-syntax -- Allow top-level await here
15
15
  const { main } = await import("./internal/cli/main.js");
@@ -14,6 +14,7 @@ import {
14
14
  import {
15
15
  exists,
16
16
  getAllFilesMatching,
17
+ readdirOrEmpty,
17
18
  readJsonFile,
18
19
  } from "@nomicfoundation/hardhat-utils/fs";
19
20
 
@@ -112,12 +113,18 @@ export class ArtifactManagerImplementation implements ArtifactManager {
112
113
  }
113
114
 
114
115
  public async getAllBuildInfoIds(): Promise<ReadonlySet<string>> {
115
- const paths = await getAllFilesMatching(
116
- path.join(this.#artifactsPath, BUILD_INFO_DIR_NAME),
117
- (p) => p.endsWith(".json") && !p.endsWith(".output.json"),
118
- );
116
+ const buildInfosDir = path.join(this.#artifactsPath, BUILD_INFO_DIR_NAME);
117
+
118
+ // The build-info directory is expected to be flat: every build-info file
119
+ // lives directly under it, so a non-recursive `readdir` is enough.
120
+ const buildInfoFiles = await readdirOrEmpty(buildInfosDir);
121
+
122
+ const jsonExtensionLength = ".json".length;
123
+ const buildInfoIds = buildInfoFiles
124
+ .filter((f) => f.endsWith(".json") && !f.endsWith(".output.json"))
125
+ .map((entry) => entry.slice(0, entry.length - jsonExtensionLength));
119
126
 
120
- return new Set(paths.map((p) => path.basename(p, ".json")));
127
+ return new Set(buildInfoIds);
121
128
  }
122
129
 
123
130
  public async getBuildInfoPath(
@@ -2,4 +2,4 @@ export {
2
2
  markTestRunStart,
3
3
  markTestRunDone,
4
4
  markTestWorkerDone,
5
- } from "./helpers.js";
5
+ } from "./helpers/compat.js";
@@ -0,0 +1,44 @@
1
+ // NOTE: This file is imported from hot paths — the plugin's `created` hook
2
+ // handler and task-actions that may run on every `hardhat test` invocation
3
+ // regardless of whether the feature is enabled. It must stay lightweight:
4
+ // do not add top-level imports that pull in the coverage-manager module
5
+ // graph (chalk, debug, node:crypto, file-system traversal, etc.), or the
6
+ // `--coverage` lazy-load is silently defeated for every caller.
7
+ // If a new helper needs a heavy dependency, put it in a sibling file
8
+ // (e.g. `helpers/utils.ts`) so the accessors file's import cost stays flat.
9
+
10
+ import type { HookContext } from "../../../../types/hooks.js";
11
+ import type { HardhatRuntimeEnvironment } from "../../../../types/hre.js";
12
+ import type { CoverageManager } from "../types.js";
13
+
14
+ import path from "node:path";
15
+
16
+ import { assertHardhatInvariant } from "@nomicfoundation/hardhat-errors";
17
+
18
+ import { HardhatRuntimeEnvironmentImplementation } from "../../../core/hre.js";
19
+
20
+ export function getCoveragePath(rootPath: string): string {
21
+ return path.join(rootPath, "coverage");
22
+ }
23
+
24
+ export function getCoverageManager(
25
+ hookContextOrHre: HookContext | HardhatRuntimeEnvironment,
26
+ ): CoverageManager {
27
+ assertHardhatInvariant(
28
+ hookContextOrHre instanceof HardhatRuntimeEnvironmentImplementation &&
29
+ hookContextOrHre._coverage !== undefined,
30
+ "Expected _coverage to be installed on the HRE",
31
+ );
32
+ return hookContextOrHre._coverage;
33
+ }
34
+
35
+ export function setCoverageManager(
36
+ hre: HardhatRuntimeEnvironment,
37
+ coverageManager: CoverageManager,
38
+ ): void {
39
+ assertHardhatInvariant(
40
+ hre instanceof HardhatRuntimeEnvironmentImplementation,
41
+ "Expected HRE to be an instance of HardhatRuntimeEnvironmentImplementation",
42
+ );
43
+ hre._coverage = coverageManager;
44
+ }
@@ -0,0 +1,37 @@
1
+ import type { HardhatRuntimeEnvironment } from "../../../../types/hre.js";
2
+
3
+ import {
4
+ testRunDone,
5
+ testRunStart,
6
+ testWorkerDone,
7
+ } from "../hook-handlers/test.js";
8
+
9
+ /**
10
+ * The following helpers are kept for backward compatibility with older versions
11
+ * of test runner plugins (hardhat-mocha, hardhat-node-test-runner) that import
12
+ * from "hardhat/internal/coverage".
13
+ */
14
+
15
+ let cachedHre: HardhatRuntimeEnvironment | undefined;
16
+ async function getHre(): Promise<HardhatRuntimeEnvironment> {
17
+ if (cachedHre === undefined) {
18
+ const { default: hre } = await import("../../../../index.js");
19
+ cachedHre = hre;
20
+ }
21
+ return cachedHre;
22
+ }
23
+
24
+ export async function markTestRunStart(id: string): Promise<void> {
25
+ const hre = await getHre();
26
+ await testRunStart(hre, id);
27
+ }
28
+
29
+ export async function markTestWorkerDone(id: string): Promise<void> {
30
+ const hre = await getHre();
31
+ await testWorkerDone(hre, id);
32
+ }
33
+
34
+ export async function markTestRunDone(id: string): Promise<void> {
35
+ const hre = await getHre();
36
+ await testRunDone(hre, id);
37
+ }
@@ -2,7 +2,7 @@ import type { CleanHooks } from "../../../../types/hooks.js";
2
2
 
3
3
  import { remove } from "@nomicfoundation/hardhat-utils/fs";
4
4
 
5
- import { getCoveragePath } from "../helpers.js";
5
+ import { getCoveragePath } from "../helpers/accessors.js";
6
6
 
7
7
  export default async (): Promise<Partial<CleanHooks>> => ({
8
8
  onClean: async (context) => {