@nomicfoundation/hardhat-utils 3.0.6 → 4.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"synchronization.js","sourceRoot":"","sources":["../../src/synchronization.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"synchronization.js","sourceRoot":"","sources":["../../src/synchronization.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nomicfoundation/hardhat-utils",
3
- "version": "3.0.6",
3
+ "version": "4.0.0",
4
4
  "description": "Utilities for Hardhat and its plugins",
5
5
  "homepage": "https://github.com/nomicfoundation/hardhat/tree/v-next/v-next/hardhat-utils",
6
6
  "repository": {
@@ -0,0 +1,75 @@
1
+ import { CustomError } from "../error.js";
2
+
3
+ export class BaseMultiProcessMutexError extends CustomError {
4
+ constructor(message: string, cause?: Error) {
5
+ super(message, cause);
6
+ }
7
+ }
8
+
9
+ export class InvalidMultiProcessMutexPathError extends BaseMultiProcessMutexError {
10
+ constructor(mutexPath: string) {
11
+ super(`The path ${mutexPath} is not a valid absolute path.`);
12
+ }
13
+ }
14
+
15
+ export class MultiProcessMutexError extends BaseMultiProcessMutexError {
16
+ constructor(lockPath: string, cause: Error) {
17
+ super(`Unexpected error with lock at ${lockPath}: ${cause.message}`, cause);
18
+ }
19
+ }
20
+
21
+ export class MultiProcessMutexTimeoutError extends BaseMultiProcessMutexError {
22
+ constructor(lockPath: string, timeoutMs: number) {
23
+ super(
24
+ `Timed out waiting to acquire lock at ${lockPath} after ${timeoutMs}ms`,
25
+ );
26
+ }
27
+ }
28
+
29
+ export class StaleMultiProcessMutexError extends BaseMultiProcessMutexError {
30
+ constructor(lockPath: string, ownerUid: number | undefined, cause: Error) {
31
+ const uidInfo = ownerUid !== undefined ? ` (uid: ${ownerUid})` : "";
32
+ super(
33
+ `Lock at ${lockPath} appears stale but cannot be removed due to insufficient permissions${uidInfo}. Please remove it manually: ${lockPath}`,
34
+ cause,
35
+ );
36
+ }
37
+ }
38
+
39
+ export class IncompatibleMultiProcessMutexError extends BaseMultiProcessMutexError {
40
+ constructor(message: string) {
41
+ super(message);
42
+ }
43
+ }
44
+
45
+ export class IncompatibleHostnameMultiProcessMutexError extends IncompatibleMultiProcessMutexError {
46
+ constructor(
47
+ lockPath: string,
48
+ foreignHostname: string,
49
+ currentHostname: string,
50
+ ) {
51
+ super(
52
+ `Lock at ${lockPath} was created by a different host (${foreignHostname}, current: ${currentHostname}). It cannot be verified or removed automatically. Please remove it manually: ${lockPath}`,
53
+ );
54
+ }
55
+ }
56
+
57
+ export class IncompatiblePlatformMultiProcessMutexError extends IncompatibleMultiProcessMutexError {
58
+ constructor(
59
+ lockPath: string,
60
+ foreignPlatform: string,
61
+ currentPlatform: string,
62
+ ) {
63
+ super(
64
+ `Lock at ${lockPath} was created on a different platform (${foreignPlatform}, current: ${currentPlatform}). It cannot be verified or removed automatically. Please remove it manually: ${lockPath}`,
65
+ );
66
+ }
67
+ }
68
+
69
+ export class IncompatibleUidMultiProcessMutexError extends IncompatibleMultiProcessMutexError {
70
+ constructor(lockPath: string, foreignUid: number, currentUid: number) {
71
+ super(
72
+ `Lock at ${lockPath} is owned by a different user (uid: ${foreignUid}, current: ${currentUid}). It cannot be removed automatically. Please remove it manually: ${lockPath}`,
73
+ );
74
+ }
75
+ }
package/src/format.ts CHANGED
@@ -9,114 +9,31 @@ import {
9
9
  renderSectionClose,
10
10
  } from "./internal/format.js";
11
11
 
12
- export type TableRow = string[];
13
- export interface TableDivider {
14
- type: "divider";
15
- }
16
- export type TableItem = TableRow | TableDivider;
17
-
18
- export const divider: TableDivider = { type: "divider" };
19
-
20
- /**
21
- * Formats an array of rows and dividers into a table string.
22
- *
23
- * @param items An array of table rows (string arrays) and dividers.
24
- * Dividers are objects with type: "divider" and will be rendered as table dividers.
25
- * @returns The formatted table as a string, ready to be rendered.
26
- *
27
- * @example
28
- * ```ts
29
- * formatTable([
30
- * ["Name", "Age"],
31
- * divider,
32
- * ["Alice", "30"],
33
- * ["Bob", "25"],
34
- * divider,
35
- * ["Average", "27.5"]
36
- * ]);
37
- *
38
- * // =>
39
- * // | Name | Age |
40
- * // | ------- | ---- |
41
- * // | Alice | 30 |
42
- * // | Bob | 25 |
43
- * // | ------- | ---- |
44
- * // | Average | 27.5 |
45
- * ```
46
- */
47
- export function formatTable(items: TableItem[]): string {
48
- const widths: number[] = [];
49
- const dataRows: string[][] = [];
50
-
51
- for (const item of items) {
52
- if (Array.isArray(item)) {
53
- dataRows.push([...item]);
54
- }
55
- }
56
-
57
- // Calculate maximum width for each column
58
- for (const row of dataRows) {
59
- for (let i = 0; i < row.length; i++) {
60
- while (i >= widths.length) {
61
- widths.push(0);
62
- }
63
- widths[i] = Math.max(widths[i], getStringWidth(row[i]));
64
- }
65
- }
66
-
67
- const dividerRow = widths.map((width) => "-".repeat(width));
68
- const outputRows: string[][] = [];
69
-
70
- for (const item of items) {
71
- if (Array.isArray(item)) {
72
- const row = [...item];
73
- // Pad the row to match the number of columns
74
- while (row.length < widths.length) {
75
- row.push("");
76
- }
77
- outputRows.push(row);
78
- } else {
79
- outputRows.push([...dividerRow]);
80
- }
81
- }
82
-
83
- outputRows.forEach((row) => {
84
- for (let i = 0; i < row.length; i++) {
85
- const displayWidth = getStringWidth(row[i]);
86
- const actualLength = row[i].length;
87
- // Adjust padding to account for difference between display width and actual length
88
- row[i] = row[i].padEnd(widths[i] + actualLength - displayWidth);
89
- }
90
- });
91
-
92
- return outputRows.map((row) => `| ${row.join(" | ")} |`).join("\n");
93
- }
94
-
95
- export interface TableTitleV2 {
12
+ export interface TableTitle {
96
13
  type: "title";
97
14
  text: string;
98
15
  }
99
16
 
100
- export interface TableSectionHeaderV2 {
17
+ export interface TableSectionHeader {
101
18
  type: "section-header";
102
19
  text: string;
103
20
  }
104
21
 
105
- export interface TableHeaderV2 {
22
+ export interface TableHeader {
106
23
  type: "header";
107
24
  cells: string[];
108
25
  }
109
26
 
110
- export interface TableRowV2 {
27
+ export interface TableRow {
111
28
  type: "row";
112
29
  cells: string[];
113
30
  }
114
31
 
115
- export type TableItemV2 =
116
- | TableTitleV2
117
- | TableSectionHeaderV2
118
- | TableHeaderV2
119
- | TableRowV2;
32
+ export type TableItem =
33
+ | TableTitle
34
+ | TableSectionHeader
35
+ | TableHeader
36
+ | TableRow;
120
37
 
121
38
  /**
122
39
  * Formats an array of titles, section headers, headers, and rows into a table
@@ -135,7 +52,7 @@ export type TableItemV2 =
135
52
  *
136
53
  * @example
137
54
  * ```ts
138
- * formatTableV2([
55
+ * formatTable([
139
56
  * { type: "title", text: "My Table" },
140
57
  * { type: "section-header", text: "User Data" },
141
58
  * { type: "header", cells: ["Name", "Age", "City"] },
@@ -168,7 +85,7 @@ export type TableItemV2 =
168
85
  * // ╚═══════╧═══════════╝
169
86
  * ```
170
87
  */
171
- export function formatTableV2(items: TableItemV2[]): string {
88
+ export function formatTable(items: TableItem[]): string {
172
89
  if (items.length === 0) {
173
90
  return "";
174
91
  }
package/src/global-dir.ts CHANGED
@@ -1,6 +1,27 @@
1
1
  import { ensureDir } from "./fs.js";
2
2
  import { generatePaths, HARDHAT_PACKAGE_NAME } from "./internal/global-dir.js";
3
3
 
4
+ // Internal override for testing purposes
5
+ let _cacheDirOverride: string | undefined;
6
+
7
+ /**
8
+ * Sets a mock cache directory for getCacheDir. This is intended for testing
9
+ * purposes only, to isolate tests from the real global cache.
10
+ *
11
+ * @param dir The directory path to use as the mock cache directory.
12
+ */
13
+ export function setMockCacheDir(dir: string): void {
14
+ _cacheDirOverride = dir;
15
+ }
16
+
17
+ /**
18
+ * Resets the mock cache directory set by setMockCacheDir.
19
+ * Call this in test cleanup to restore normal behavior.
20
+ */
21
+ export function resetMockCacheDir(): void {
22
+ _cacheDirOverride = undefined;
23
+ }
24
+
4
25
  /**
5
26
  * Returns the configuration directory path for a given package (defaults to "hardhat").
6
27
  * Ensures that the directory exists before returning the path.
@@ -21,6 +42,10 @@ export async function getConfigDir(
21
42
  * Returns the cache directory path for a given package (defaults to "hardhat").
22
43
  * Ensures that the directory exists before returning the path.
23
44
  *
45
+ * For testing purposes, the cache directory can be overridden using
46
+ * setMockCacheDir(). This is intended to isolate tests from the real
47
+ * global cache.
48
+ *
24
49
  * @param packageName The name of the package for which to generate paths. Defaults to "hardhat" if no package name is provided.
25
50
  * @returns The path to the hardhat cache directory.
26
51
  * @throws FileSystemAccessError for any error.
@@ -28,6 +53,12 @@ export async function getConfigDir(
28
53
  export async function getCacheDir(
29
54
  packageName: string = HARDHAT_PACKAGE_NAME,
30
55
  ): Promise<string> {
56
+ // Allow override for testing purposes
57
+ if (_cacheDirOverride !== undefined) {
58
+ await ensureDir(_cacheDirOverride);
59
+ return _cacheDirOverride;
60
+ }
61
+
31
62
  const { cache } = await generatePaths(packageName);
32
63
  await ensureDir(cache);
33
64
  return cache;
@@ -1,4 +1,4 @@
1
- import type { TableItemV2 } from "../format.js";
1
+ import type { TableItem } from "../format.js";
2
2
 
3
3
  /**
4
4
  * Calculate the display width of a string by removing ANSI escape codes.
@@ -17,7 +17,7 @@ export function getStringWidth(str: string): number {
17
17
  * Calculates the minimum width needed by each column in the table
18
18
  * to fit its content (accounting for ANSI color codes).
19
19
  */
20
- export function getColumnWidths(items: TableItemV2[]): number[] {
20
+ export function getColumnWidths(items: TableItem[]): number[] {
21
21
  const columnWidths: number[] = [];
22
22
 
23
23
  for (const item of items) {
@@ -53,7 +53,7 @@ export function getContentWidth(columnWidths: number[]): number {
53
53
  * Each title/header is padded by 1 space on each side.
54
54
  * Accounts for ANSI color codes.
55
55
  */
56
- export function getHeadingWidth(items: TableItemV2[]): number {
56
+ export function getHeadingWidth(items: TableItem[]): number {
57
57
  let headingWidth = 0;
58
58
  for (const item of items) {
59
59
  if (item.type === "section-header" || item.type === "title") {
@@ -2,6 +2,7 @@ import type { DispatcherOptions, RequestOptions } from "../request.js";
2
2
  import type EventEmitter from "node:events";
3
3
  import type UndiciT from "undici";
4
4
 
5
+ import crypto from "node:crypto";
5
6
  import path from "node:path";
6
7
 
7
8
  import { mkdir } from "../fs.js";
@@ -24,7 +25,7 @@ export async function generateTempFilePath(filePath: string): Promise<string> {
24
25
  return path.format({
25
26
  dir,
26
27
  ext,
27
- name: `tmp-${name}`,
28
+ name: `tmp-${name}-${crypto.randomBytes(8).toString("hex")}`,
28
29
  });
29
30
  }
30
31
 
package/src/request.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import type EventEmitter from "node:events";
2
+ import type { FileHandle } from "node:fs/promises";
2
3
  import type { ParsedUrlQueryInput } from "node:querystring";
3
4
  import type UndiciT from "undici";
4
5
 
5
- import fs from "node:fs";
6
+ import { open } from "node:fs/promises";
6
7
  import querystring from "node:querystring";
7
8
  import stream from "node:stream/promises";
8
9
 
@@ -12,7 +13,7 @@ import {
12
13
  RequestError,
13
14
  DispatcherError,
14
15
  } from "./errors/request.js";
15
- import { move } from "./fs.js";
16
+ import { move, remove } from "./fs.js";
16
17
  import {
17
18
  generateTempFilePath,
18
19
  getBaseDispatcherOptions,
@@ -217,11 +218,12 @@ export async function download(
217
218
  dispatcherOrDispatcherOptions?: UndiciT.Dispatcher | DispatcherOptions,
218
219
  ): Promise<void> {
219
220
  let statusCode: number | undefined;
221
+ let tempFilePath: string | undefined;
220
222
 
221
223
  try {
222
224
  /* eslint-disable-next-line @typescript-eslint/consistent-type-assertions
223
225
  -- We need the full Dispatcher.ResponseData here for stream.pipeline,
224
- but HttpResponse doesnt expose the raw ReadableStream.
226
+ but HttpResponse doesn't expose the raw ReadableStream.
225
227
  TODO: wrap undici's request so we can keep the public API
226
228
  strictly typed without falling back to Undici types. */
227
229
  const response = (await getRequest(
@@ -236,13 +238,34 @@ export async function download(
236
238
  throw new Error(await body.text());
237
239
  }
238
240
 
239
- const tempFilePath = await generateTempFilePath(destination);
240
- const fileStream = fs.createWriteStream(tempFilePath);
241
- await stream.pipeline(body, fileStream);
241
+ tempFilePath = await generateTempFilePath(destination);
242
+
243
+ let fileHandle: FileHandle | undefined;
244
+
245
+ try {
246
+ fileHandle = await open(tempFilePath, "w");
247
+
248
+ const fileStream = fileHandle.createWriteStream();
249
+
250
+ await stream.pipeline(body, fileStream);
251
+ } finally {
252
+ // NOTE: Historically, not closing the file handle caused issues on Windows,
253
+ // for example, when trying to move the file previously written to by this function
254
+ await fileHandle?.close();
255
+ }
256
+
242
257
  await move(tempFilePath, destination);
243
258
  } catch (e) {
244
259
  ensureError(e);
245
260
 
261
+ if (tempFilePath !== undefined) {
262
+ try {
263
+ await remove(tempFilePath);
264
+ } catch {
265
+ // Best-effort: file may not exist or may have already been moved
266
+ }
267
+ }
268
+
246
269
  handleError(e, url);
247
270
 
248
271
  throw new DownloadError(url, e);