hardhat-deploy 2.0.0-next.77 → 2.0.0-next.78
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.
- package/dist/cli.js +2 -5
- package/dist/cli.js.map +1 -1
- package/dist/postinstall.js.map +1 -1
- package/dist/utils/files.js +1 -2
- package/dist/utils/files.js.map +1 -1
- package/package.json +8 -8
- package/src/cli.ts +204 -205
- package/src/config/validation.ts +2 -2
- package/src/hook-handlers/solidity.ts +2 -2
- package/src/postinstall.ts +74 -75
- package/src/utils/files.ts +2 -2
package/dist/cli.js
CHANGED
|
@@ -93,7 +93,7 @@ const copyFolder = (source, target, replacements = {}, gitignorePatterns = []) =
|
|
|
93
93
|
const stat = statSync(sourcePath);
|
|
94
94
|
if (stat.isDirectory()) {
|
|
95
95
|
// Check if directory should be skipped based on gitignore patterns
|
|
96
|
-
const shouldSkip = gitignorePatterns.some(pattern => file === pattern.replace('/', '') || pattern.startsWith('/') && file === pattern.slice(1));
|
|
96
|
+
const shouldSkip = gitignorePatterns.some((pattern) => file === pattern.replace('/', '') || (pattern.startsWith('/') && file === pattern.slice(1)));
|
|
97
97
|
if (!shouldSkip) {
|
|
98
98
|
copyFolder(sourcePath, targetPath, replacements, gitignorePatterns);
|
|
99
99
|
}
|
|
@@ -145,10 +145,7 @@ const runPnpmInstall = async (folderPath) => {
|
|
|
145
145
|
});
|
|
146
146
|
});
|
|
147
147
|
};
|
|
148
|
-
program
|
|
149
|
-
.name('hardhat-deploy')
|
|
150
|
-
.description('CLI for hardhat-deploy')
|
|
151
|
-
.version(pkg.version);
|
|
148
|
+
program.name('hardhat-deploy').description('CLI for hardhat-deploy').version(pkg.version);
|
|
152
149
|
program
|
|
153
150
|
.command('init')
|
|
154
151
|
.argument('[folder]', 'folder to initialize the project in')
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/postinstall.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":";AAEA,mDAAmD;AACnD,wDAAwD;AAExD,OAAO,
|
|
1
|
+
{"version":3,"file":"postinstall.js","sourceRoot":"","sources":["../src/postinstall.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/files.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
export function traverse(dir, result = [], topDir, filter
|
|
4
|
-
) {
|
|
3
|
+
export function traverse(dir, result = [], topDir, filter) {
|
|
5
4
|
fs.readdirSync(dir).forEach((name) => {
|
|
6
5
|
const fPath = path.resolve(dir, name);
|
|
7
6
|
const stats = fs.statSync(fPath);
|
package/dist/utils/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAU7B,MAAM,UAAU,QAAQ,CACvB,GAAW,EACX,SAAgB,EAAE,EAClB,MAAe,EACf,MAA8C,
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../src/utils/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAU7B,MAAM,UAAU,QAAQ,CACvB,GAAW,EACX,SAAgB,EAAE,EAClB,MAAe,EACf,MAA8C;IAE9C,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3E,MAAM,SAAS,GAAG;gBACjB,IAAI;gBACJ,IAAI,EAAE,KAAK;gBACX,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,GAAG,EAAE,KAAK,CAAC;gBACjD,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,SAAS,EAAE,KAAK,CAAC,WAAW,EAAE;aAC9B,CAAC;YACF,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACvB,OAAO,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;YACvD,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;IACF,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AACf,CAAC;AAED,6CAA6C;AAC7C;;;;;;;;;;EAUE;AACF,MAAM,UAAU,KAAK,CAAC,IAAY;IACjC,MAAM,oBAAoB,GAAG,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAExD,IAAI,oBAAoB,EAAE,CAAC;QAC1B,OAAO,IAAI,CAAC;IACb,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACjC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hardhat-deploy",
|
|
3
|
-
"version": "2.0.0-next.
|
|
3
|
+
"version": "2.0.0-next.78",
|
|
4
4
|
"description": "Hardhat plugin for replicable smart contract deployments and easy testing across multiple EVM chains, with support for proxies, diamonds, named accounts, and deployment fixtures",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"hardhat",
|
|
@@ -56,18 +56,18 @@
|
|
|
56
56
|
},
|
|
57
57
|
"devDependencies": {
|
|
58
58
|
"@changesets/cli": "^2.29.8",
|
|
59
|
-
"@rocketh/node": "^0.18.
|
|
60
|
-
"@types/node": "^25.2.
|
|
59
|
+
"@rocketh/node": "^0.18.7",
|
|
60
|
+
"@types/node": "^25.2.3",
|
|
61
61
|
"as-soon": "^0.1.5",
|
|
62
|
-
"hardhat": "3.1.
|
|
63
|
-
"rimraf": "^6.1.
|
|
64
|
-
"rocketh": "^0.18.
|
|
62
|
+
"hardhat": "3.1.8",
|
|
63
|
+
"rimraf": "^6.1.3",
|
|
64
|
+
"rocketh": "^0.18.6",
|
|
65
65
|
"set-defaults": "^0.0.5",
|
|
66
66
|
"typescript": "^5.9.3"
|
|
67
67
|
},
|
|
68
68
|
"peerDependencies": {
|
|
69
|
-
"@rocketh/node": "^0.18.
|
|
70
|
-
"hardhat": "^3.1.
|
|
69
|
+
"@rocketh/node": "^0.18.7",
|
|
70
|
+
"hardhat": "^3.1.8"
|
|
71
71
|
},
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"@nomicfoundation/hardhat-zod-utils": "^3.0.1",
|
package/src/cli.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
3
|
+
import {Command} from 'commander';
|
|
4
|
+
import {readFileSync, readdirSync, mkdirSync, copyFileSync, existsSync, writeFileSync, statSync} from 'fs';
|
|
5
|
+
import {join, dirname, basename} from 'path';
|
|
6
|
+
import {fileURLToPath} from 'url';
|
|
7
7
|
import * as readline from 'readline';
|
|
8
|
-
import pkg from '../package.json' with {
|
|
8
|
+
import pkg from '../package.json' with {type: 'json'};
|
|
9
9
|
|
|
10
10
|
const __filename = fileURLToPath(import.meta.url);
|
|
11
11
|
const __dirname = dirname(__filename);
|
|
@@ -14,233 +14,232 @@ const program = new Command();
|
|
|
14
14
|
|
|
15
15
|
// Get the current version of hardhat-deploy
|
|
16
16
|
const getHardhatDeployVersion = (): string => {
|
|
17
|
-
|
|
17
|
+
return pkg.version;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
20
|
const askFolder = async (): Promise<string> => {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
21
|
+
const rl = readline.createInterface({
|
|
22
|
+
input: process.stdin,
|
|
23
|
+
output: process.stdout,
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
return new Promise((resolve) => {
|
|
27
|
+
rl.question('Enter folder path (default: ./): ', (answer) => {
|
|
28
|
+
rl.close();
|
|
29
|
+
resolve(answer.trim() || './');
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
32
|
};
|
|
33
33
|
|
|
34
34
|
const askAutoInstall = async (): Promise<boolean> => {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
35
|
+
const rl = readline.createInterface({
|
|
36
|
+
input: process.stdin,
|
|
37
|
+
output: process.stdout,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
return new Promise((resolve) => {
|
|
41
|
+
rl.question('Auto-install dependencies with pnpm? (Y/n): ', (answer) => {
|
|
42
|
+
rl.close();
|
|
43
|
+
const trimmed = answer.trim().toLowerCase();
|
|
44
|
+
resolve(trimmed === '' || trimmed === 'y' || trimmed === 'yes');
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
47
|
};
|
|
48
48
|
|
|
49
49
|
const isFolderEmpty = (folderPath: string): boolean => {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
50
|
+
if (!existsSync(folderPath)) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
try {
|
|
55
|
+
const files = readdirSync(folderPath);
|
|
56
|
+
return files.length === 0;
|
|
57
|
+
} catch (error) {
|
|
58
|
+
// If we can't read the directory, treat it as not empty
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
61
|
};
|
|
62
62
|
|
|
63
63
|
const copyFile = (
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
source: string,
|
|
65
|
+
target: string,
|
|
66
|
+
replacements: Record<string, string> = {},
|
|
67
|
+
gitignorePatterns: string[] = [],
|
|
68
68
|
): void => {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
69
|
+
const fileName = basename(source);
|
|
70
|
+
|
|
71
|
+
// Check if file should be skipped based on gitignore patterns
|
|
72
|
+
for (const pattern of gitignorePatterns) {
|
|
73
|
+
if (fileName === pattern || fileName.endsWith(pattern.replace('*', ''))) {
|
|
74
|
+
return; // Skip this file
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
let content = readFileSync(source, 'utf-8');
|
|
79
|
+
|
|
80
|
+
// Apply replacements
|
|
81
|
+
for (const [search, replace] of Object.entries(replacements)) {
|
|
82
|
+
content = content.replaceAll(search, replace);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
mkdirSync(dirname(target), {recursive: true});
|
|
86
|
+
|
|
87
|
+
// For binary files, just copy as-is
|
|
88
|
+
if (source.endsWith('.lock') || source.endsWith('.so') || source.endsWith('.wasm')) {
|
|
89
|
+
copyFileSync(source, target);
|
|
90
|
+
} else {
|
|
91
|
+
writeFileSync(target, content, 'utf-8');
|
|
92
|
+
}
|
|
93
93
|
};
|
|
94
94
|
|
|
95
95
|
const parseGitignore = (gitignorePath: string): string[] => {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
96
|
+
if (!existsSync(gitignorePath)) {
|
|
97
|
+
return [];
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
const content = readFileSync(gitignorePath, 'utf-8');
|
|
101
|
+
return content
|
|
102
|
+
.split('\n')
|
|
103
|
+
.map((line: string) => line.trim())
|
|
104
|
+
.filter((line: string) => line && !line.startsWith('#'));
|
|
105
105
|
};
|
|
106
106
|
|
|
107
107
|
const copyFolder = (
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
108
|
+
source: string,
|
|
109
|
+
target: string,
|
|
110
|
+
replacements: Record<string, string> = {},
|
|
111
|
+
gitignorePatterns: string[] = [],
|
|
112
112
|
): void => {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
113
|
+
if (!existsSync(target)) {
|
|
114
|
+
mkdirSync(target, {recursive: true});
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const files = readdirSync(source);
|
|
118
|
+
|
|
119
|
+
files.forEach((file) => {
|
|
120
|
+
const sourcePath = join(source, file);
|
|
121
|
+
const targetPath = join(target, file);
|
|
122
|
+
|
|
123
|
+
const stat = statSync(sourcePath);
|
|
124
|
+
|
|
125
|
+
if (stat.isDirectory()) {
|
|
126
|
+
// Check if directory should be skipped based on gitignore patterns
|
|
127
|
+
const shouldSkip = gitignorePatterns.some(
|
|
128
|
+
(pattern) => file === pattern.replace('/', '') || (pattern.startsWith('/') && file === pattern.slice(1)),
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
if (!shouldSkip) {
|
|
132
|
+
copyFolder(sourcePath, targetPath, replacements, gitignorePatterns);
|
|
133
|
+
}
|
|
134
|
+
} else {
|
|
135
|
+
copyFile(sourcePath, targetPath, replacements, gitignorePatterns);
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
138
|
};
|
|
139
139
|
|
|
140
140
|
const generateProject = (targetFolder: string, projectName?: string): void => {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
141
|
+
// find template in published package
|
|
142
|
+
const templatePath = join(__dirname, '../templates/basic');
|
|
143
|
+
const gitignorePath = join(templatePath, '.gitignore');
|
|
144
|
+
|
|
145
|
+
// Parse gitignore patterns
|
|
146
|
+
const gitignorePatterns = parseGitignore(gitignorePath);
|
|
147
|
+
|
|
148
|
+
// Determine project name from folder or use placeholder
|
|
149
|
+
const folderName = projectName || basename(targetFolder === './' ? process.cwd() : targetFolder);
|
|
150
|
+
|
|
151
|
+
// Get the current version of hardhat-deploy
|
|
152
|
+
const hardhatDeployVersion = getHardhatDeployVersion();
|
|
153
|
+
|
|
154
|
+
const replacements: Record<string, string> = {
|
|
155
|
+
'template-hardhat-node-test-runner': `${folderName}`,
|
|
156
|
+
'workspace:*': hardhatDeployVersion,
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
console.log(`Generating project in: ${targetFolder}`);
|
|
160
|
+
copyFolder(templatePath, targetFolder, replacements, gitignorePatterns);
|
|
161
|
+
console.log('✓ Project initialized successfully!');
|
|
162
162
|
};
|
|
163
163
|
|
|
164
164
|
const runPnpmInstall = async (folderPath: string): Promise<void> => {
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
165
|
+
console.log(`Installing dependencies...`);
|
|
166
|
+
const {spawn} = await import('child_process');
|
|
167
|
+
|
|
168
|
+
return new Promise((resolve, reject) => {
|
|
169
|
+
// Use --ignore-workspace to ensure dependencies are installed locally
|
|
170
|
+
// This prevents pnpm from treating the target folder as part of a parent workspace
|
|
171
|
+
const pnpm = spawn('pnpm', ['install', '--ignore-workspace', `--no-frozen-lockfile`], {
|
|
172
|
+
cwd: folderPath,
|
|
173
|
+
stdio: 'inherit',
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
pnpm.on('close', (code) => {
|
|
177
|
+
if (code === 0) {
|
|
178
|
+
console.log('✓ Dependencies installed successfully!');
|
|
179
|
+
resolve();
|
|
180
|
+
} else {
|
|
181
|
+
reject(new Error(`pnpm install failed with exit code ${code}`));
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
|
|
185
|
+
pnpm.on('error', (error) => {
|
|
186
|
+
reject(error);
|
|
187
|
+
});
|
|
188
|
+
});
|
|
189
189
|
};
|
|
190
190
|
|
|
191
|
-
program
|
|
192
|
-
.name('hardhat-deploy')
|
|
193
|
-
.description('CLI for hardhat-deploy')
|
|
194
|
-
.version(pkg.version);
|
|
191
|
+
program.name('hardhat-deploy').description('CLI for hardhat-deploy').version(pkg.version);
|
|
195
192
|
|
|
196
193
|
program
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
194
|
+
.command('init')
|
|
195
|
+
.argument('[folder]', 'folder to initialize the project in')
|
|
196
|
+
.option('--install', 'auto-install dependencies with pnpm')
|
|
197
|
+
.description('Initialize a new hardhat-deploy project')
|
|
198
|
+
.action(async (folder?: string, options?: {install?: boolean}) => {
|
|
199
|
+
let targetFolder = folder;
|
|
200
|
+
let autoInstall = options?.install ?? false;
|
|
201
|
+
|
|
202
|
+
// If no folder specified, ask user
|
|
203
|
+
if (!targetFolder) {
|
|
204
|
+
targetFolder = await askFolder();
|
|
205
|
+
// If we prompted for folder, also prompt for auto-install
|
|
206
|
+
autoInstall = await askAutoInstall();
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// Normalize path
|
|
210
|
+
targetFolder = targetFolder.trim();
|
|
211
|
+
|
|
212
|
+
// Check if folder is empty
|
|
213
|
+
if (!isFolderEmpty(targetFolder)) {
|
|
214
|
+
console.error(
|
|
215
|
+
`Error: Folder "${targetFolder}" is not empty. Please specify an empty folder or a new folder path.`,
|
|
216
|
+
);
|
|
217
|
+
process.exit(1);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// Generate project
|
|
221
|
+
generateProject(targetFolder);
|
|
222
|
+
|
|
223
|
+
// Auto-install if requested
|
|
224
|
+
if (autoInstall) {
|
|
225
|
+
try {
|
|
226
|
+
await runPnpmInstall(targetFolder);
|
|
227
|
+
} catch (error) {
|
|
228
|
+
console.error('Failed to install dependencies:', error);
|
|
229
|
+
console.log('\nYou can install dependencies manually:');
|
|
230
|
+
console.log(` cd ${targetFolder === './' ? '.' : targetFolder}`);
|
|
231
|
+
console.log(' pnpm install');
|
|
232
|
+
process.exit(1);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Show next steps
|
|
237
|
+
console.log(`\nNext steps:`);
|
|
238
|
+
console.log(` cd ${targetFolder === './' ? '.' : targetFolder}`);
|
|
239
|
+
if (!autoInstall) {
|
|
240
|
+
console.log(` pnpm install`);
|
|
241
|
+
}
|
|
242
|
+
console.log(` pnpm hardhat test`);
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
program.parse();
|
package/src/config/validation.ts
CHANGED
|
@@ -12,14 +12,14 @@ const artifactGenerationUserConfigSchema = z
|
|
|
12
12
|
z.object({
|
|
13
13
|
mode: z.union([z.literal('javascript'), z.literal('typescript')]).optional(),
|
|
14
14
|
folder: z.string().optional(),
|
|
15
|
-
})
|
|
15
|
+
}),
|
|
16
16
|
)
|
|
17
17
|
.optional(),
|
|
18
18
|
})
|
|
19
19
|
.optional();
|
|
20
20
|
|
|
21
21
|
export async function validateTypechainUserConfig(
|
|
22
|
-
userConfig: HardhatUserConfig
|
|
22
|
+
userConfig: HardhatUserConfig,
|
|
23
23
|
): Promise<HardhatUserConfigValidationError[]> {
|
|
24
24
|
return validateUserConfigZodType(userConfig.generateTypedArtifacts, artifactGenerationUserConfigSchema);
|
|
25
25
|
}
|
|
@@ -7,7 +7,7 @@ export default async (): Promise<Partial<SolidityHooks>> => {
|
|
|
7
7
|
async onCleanUpArtifacts(
|
|
8
8
|
context: HookContext,
|
|
9
9
|
artifactPaths: string[],
|
|
10
|
-
next: (nextContext: HookContext, artifactPaths: string[]) => Promise<void
|
|
10
|
+
next: (nextContext: HookContext, artifactPaths: string[]) => Promise<void>,
|
|
11
11
|
) {
|
|
12
12
|
let artifactPathsToProcess = [context.config.paths.artifacts];
|
|
13
13
|
// if (context.config.generateTypedArtifacts.externalArtifacts) {
|
|
@@ -21,7 +21,7 @@ export default async (): Promise<Partial<SolidityHooks>> => {
|
|
|
21
21
|
{
|
|
22
22
|
artifacts: artifactPathsToProcess,
|
|
23
23
|
},
|
|
24
|
-
context.config.generateTypedArtifacts
|
|
24
|
+
context.config.generateTypedArtifacts,
|
|
25
25
|
);
|
|
26
26
|
}
|
|
27
27
|
|
package/src/postinstall.ts
CHANGED
|
@@ -3,10 +3,9 @@
|
|
|
3
3
|
// Attempt to detect if user is in a v1 environment
|
|
4
4
|
// This script should be lightweight and fail gracefully
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
6
|
+
import {existsSync, readFileSync, writeFileSync} from 'fs';
|
|
7
|
+
import {join, dirname} from 'path';
|
|
8
|
+
import {execSync} from 'child_process';
|
|
10
9
|
|
|
11
10
|
const MIGRATION_URL = 'https://rocketh.dev/hardhat-deploy/documentation/how-to/migration-from-v1.html';
|
|
12
11
|
const V1_INSTALL_CMD = 'npm install hardhat-deploy@1';
|
|
@@ -15,88 +14,88 @@ const MARKER_FILE = '.hardhat-deploy-v2-notice';
|
|
|
15
14
|
// Find the project root by navigating up from node_modules
|
|
16
15
|
function findProjectRoot(currentPath: string): string {
|
|
17
16
|
let path = currentPath;
|
|
18
|
-
|
|
17
|
+
|
|
19
18
|
while (path !== '/' && path !== '') {
|
|
20
19
|
// Check if we're inside node_modules
|
|
21
20
|
if (path.includes('node_modules')) {
|
|
22
21
|
path = dirname(path);
|
|
23
22
|
continue;
|
|
24
23
|
}
|
|
25
|
-
|
|
24
|
+
|
|
26
25
|
// Check if this directory has a package.json (likely project root)
|
|
27
26
|
if (existsSync(join(path, 'package.json'))) {
|
|
28
27
|
return path;
|
|
29
28
|
}
|
|
30
|
-
|
|
29
|
+
|
|
31
30
|
path = dirname(path);
|
|
32
31
|
}
|
|
33
|
-
|
|
32
|
+
|
|
34
33
|
// Fallback to current directory
|
|
35
34
|
return currentPath;
|
|
36
35
|
}
|
|
37
36
|
|
|
38
37
|
async function checkEnvironment() {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
38
|
+
// Postinstall runs in the package directory, need to find the actual project root
|
|
39
|
+
const projectRoot = findProjectRoot(process.cwd());
|
|
40
|
+
let v1Detected = false;
|
|
41
|
+
let reasons: string[] = [];
|
|
42
|
+
|
|
43
|
+
// Check for hardhat version via command line
|
|
44
|
+
try {
|
|
45
|
+
const output = execSync('hardhat --version', {encoding: 'utf-8', stdio: 'pipe', cwd: projectRoot});
|
|
46
|
+
// Output format is like "hardhat, version 2.x.x" or "hardhat, version 3.x.x"
|
|
47
|
+
const match = output.match(/hardhat, version (\d+\.\d+\.\d+)/);
|
|
48
|
+
if (match) {
|
|
49
|
+
const hardhatVersion = match[1];
|
|
50
|
+
if (hardhatVersion.startsWith('2.')) {
|
|
51
|
+
v1Detected = true;
|
|
52
|
+
reasons.push(`hardhat ${hardhatVersion} detected (v2 requires hardhat 3.x)`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
} catch (e) {
|
|
56
|
+
// Hardhat not installed yet - that's fine
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// Check for v1-style config patterns
|
|
60
|
+
try {
|
|
61
|
+
const configFiles = ['hardhat.config.js', 'hardhat.config.ts'];
|
|
62
|
+
|
|
63
|
+
for (const configFile of configFiles) {
|
|
64
|
+
const configPath = join(projectRoot, configFile);
|
|
65
|
+
if (existsSync(configPath)) {
|
|
66
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
67
|
+
|
|
68
|
+
if (content.includes('namedAccounts')) {
|
|
69
|
+
v1Detected = true;
|
|
70
|
+
reasons.push(`'namedAccounts' found in ${configFile}`);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (content.includes("require('hardhat-deploy')") || content.includes('require("hardhat-deploy")')) {
|
|
74
|
+
v1Detected = true;
|
|
75
|
+
reasons.push(`require('hardhat-deploy') found in ${configFile}`);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (content.includes('module.exports')) {
|
|
79
|
+
v1Detected = true;
|
|
80
|
+
reasons.push(`CommonJS 'module.exports' found in ${configFile}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
} catch (e) {
|
|
85
|
+
// Config check failed - continue silently
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
if (v1Detected) {
|
|
89
|
+
printV1Warning(reasons);
|
|
90
|
+
createMarkerFile(projectRoot, reasons);
|
|
91
|
+
} else {
|
|
92
|
+
printWelcome();
|
|
93
|
+
}
|
|
95
94
|
}
|
|
96
95
|
|
|
97
96
|
function createMarkerFile(projectRoot: string, reasons: string[]) {
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
const markerPath = join(projectRoot, MARKER_FILE);
|
|
98
|
+
const content = `HARDHAT-DEPLOY V2 - V1 PATTERNS DETECTED
|
|
100
99
|
|
|
101
100
|
This file was created because hardhat-deploy v2 detected v1 patterns in your project.
|
|
102
101
|
You can delete this file after reading.
|
|
@@ -116,17 +115,17 @@ To resolve this, either:
|
|
|
116
115
|
For more information, see the migration guide.
|
|
117
116
|
`;
|
|
118
117
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
118
|
+
try {
|
|
119
|
+
writeFileSync(markerPath, content, 'utf-8');
|
|
120
|
+
} catch (e) {
|
|
121
|
+
// Failed to write marker file - continue anyway
|
|
122
|
+
}
|
|
124
123
|
}
|
|
125
124
|
|
|
126
125
|
function printV1Warning(reasons: string[]) {
|
|
127
|
-
|
|
126
|
+
const reasonsList = reasons.map((r) => ` • ${r}`).join('\n');
|
|
128
127
|
|
|
129
|
-
|
|
128
|
+
console.log(`
|
|
130
129
|
╔══════════════════════════════════════════════════════════════════════════════╗
|
|
131
130
|
║ ║
|
|
132
131
|
║ ⚠️ HARDHAT-DEPLOY V2 - V1 PATTERNS DETECTED ║
|
|
@@ -157,10 +156,10 @@ A marker file '${MARKER_FILE}' has been created in your project root.
|
|
|
157
156
|
}
|
|
158
157
|
|
|
159
158
|
function printWelcome() {
|
|
160
|
-
|
|
159
|
+
console.log(`
|
|
161
160
|
✓ hardhat-deploy v2 installed successfully!
|
|
162
161
|
Documentation: https://rocketh.dev/hardhat-deploy/
|
|
163
162
|
`);
|
|
164
163
|
}
|
|
165
164
|
|
|
166
|
-
checkEnvironment().catch(() => {});
|
|
165
|
+
checkEnvironment().catch(() => {});
|
package/src/utils/files.ts
CHANGED
|
@@ -13,7 +13,7 @@ export function traverse(
|
|
|
13
13
|
dir: string,
|
|
14
14
|
result: any[] = [],
|
|
15
15
|
topDir?: string,
|
|
16
|
-
filter?: (name: string, stats: any) => boolean // TODO any is Stats
|
|
16
|
+
filter?: (name: string, stats: any) => boolean, // TODO any is Stats
|
|
17
17
|
): Array<FileTraversed> {
|
|
18
18
|
fs.readdirSync(dir).forEach((name) => {
|
|
19
19
|
const fPath = path.resolve(dir, name);
|
|
@@ -56,4 +56,4 @@ export function slash(path: string) {
|
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
return path.replace(/\\/g, '/');
|
|
59
|
-
}
|
|
59
|
+
}
|